JS本地不提供一个方便的格式化功能,它看起来很困惑和难以与字符拼接阅读,它使用起来非常不方便。我觉得C #提供语法更好,如:


字符串(格式)(欢迎学习{ 0 }),{ 0 }是令人敬畏的,您将{ 1 } }!


这种顺序替换方式更清晰,在替换相同内容时可以省略重复参数。下面是js的简单实现版本(未经过严格测试)。


(函数(出口){)
exports.format =函数(){
var args = array.prototype.slice.call(参数),
sourcestr = args.shift();

功能execreplace(文本、置换、指标){
返回text.replace(new RegExp( {+指数+ }
}

返回args.reduce(execreplace,sourcestr);
}
(窗口。工具)window.utils | | } = { });

console.log(utils。格式(欢迎学习{ 0 }{ 0 }是可怕的,你会{ 1 }!;


关键是这个:


Args.reduce(execreplace,sourcestr);


这里我们使用数组的减函数。减少和reduceright新功能添加的ES5。该函数的参数是减少(回调,回调4,初值)和接收参数,即:

PreviousValue:

当穿越进入回调函数的第一时间,如果initivalvalue指定,initivalvalue将直接使用。如果未指定,则将使用数组的第一个元素。

该值的第二个和以后的遍历是前一个遍历返回的结果。

最后一次遍历返回的结果将是减函数的返回值。

当前项目的穿越电流:

下标:数组中当前项的下标。

数组:原始数组

在execreplace,先前交代的结果,作为每一个执行原来的替换字符串。当前项的索引用作替换的内容,然后依次遍历。最后,替换内容已经完成。

注:reduceright基本上是为减少功能相同,但它的遍历顺序是从右到左