带数组的JavaScript字符串格式
我正在使用库格式化node.js中的字符串带数组的JavaScript字符串格式,javascript,arrays,node.js,string-formatting,Javascript,Arrays,Node.js,String Formatting,我正在使用库格式化node.js中的字符串 var stringFormat = require('stringformat'); stringFormat.extendString(); 我尝试传递一个参数数组,而不是内联传递,如下所示: var formatted = '{0}{1}'.format(params); String.prototype.myFormatString = function(_array){ var s = _array[0]; for (va
var stringFormat = require('stringformat');
stringFormat.extendString();
我尝试传递一个参数数组,而不是内联传递,如下所示:
var formatted = '{0}{1}'.format(params);
String.prototype.myFormatString = function(_array){
var s = _array[0];
for (var i = 0; i < _array.length - 1; i++) {
var reg = new RegExp("\\{" + i + "\\}", "gm");
s = s.replace(reg, _array[i + 1]);
}
return s;
}
而不是:
var formatted = '{0}{1}'.format(params[0], params[1]);
但是图书馆不支持这个
我一直在问这个问题:
并尝试了以下方法:
params.unshift('{0}{1}');
String.prototype.format.apply(String.prototype, params);
而且:
var i = -1;
'{0}{1}...'.format(function() {
i++;
return params[0];
});
而且没有一个像预期的那样工作
有什么想法吗?您可以编写自己的格式扩展,如下所示:
var formatted = '{0}{1}'.format(params);
String.prototype.myFormatString = function(_array){
var s = _array[0];
for (var i = 0; i < _array.length - 1; i++) {
var reg = new RegExp("\\{" + i + "\\}", "gm");
s = s.replace(reg, _array[i + 1]);
}
return s;
}
希望这能有所帮助。或者如果您不想使用我在评论中提到的扩展运算符,您也可以在ES5中执行类似操作
function formatWithArray(str,arr){
var a = arr[0],
b = arr[1],
c = arr[2],
d = arr[3];
return str.format(a,b,c,d);
}
var formatted = formatWithArray('{0}{1}',params);
虽然在您的特定情况下,最后两个(c和d)将是未定义的,但最多可以使用4个参数。我希望stringFormat库不会为多余的参数而烦恼。可能您可以尝试
var-formatted='{0}{1}'。format(…params)代码>什么是…
?这是ES6功能扩展运算符。它非常适合这种情况。s.replace(reg,arguments[i+1])代码>应该是s.replace(reg,数组[i+1])代码>