我正在使用stringformat库来格式化node.js中的字符串。
var stringFormat = require('stringformat');
stringFormat.extendString();
我试图传递一系列参数而不是内联,如下所示:
var formatted = '{0}{1}'.format(params);
而不是:
var formatted = '{0}{1}'.format(params[0], params[1]);
但是图书馆不支持这个。
我已经关注了这个问题:nodejs-util-format-passing-an-array 并尝试了这个:
params.unshift('{0}{1}');
String.prototype.format.apply(String.prototype, params);
还有:
var i = -1;
'{0}{1}...'.format(function() {
i++;
return params[0];
});
他们都没有按预期工作。
有什么想法吗?
答案 0 :(得分:1)
您可以像这样编写自己的格式扩展名:
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}'.myFormatString(params);
希望有所帮助。
答案 1 :(得分:1)
或者如果你不想像我在评论中提到的那样使用点差运算符,你也可以在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);
最多可以处理4个参数,但在特定情况下,最后两个(c和d)将是未定义的。我希望stringFormat库不会打扰多余的参数。