JavaScript Stringformat with array

时间:2016-06-05 07:20:40

标签: javascript arrays node.js string-formatting

我正在使用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];
});

他们都没有按预期工作。

有什么想法吗?

2 个答案:

答案 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库不会打扰多余的参数。