【问题标题】:JavaScript Stringformat with array带有数组的 JavaScript 字符串格式
【发布时间】:2016-06-05 15:56:18
【问题描述】:

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

而且它们都没有按预期工作。

有什么想法吗?

【问题讨论】:

  • 也许你可以试试var formatted = '{0}{1}'.format(...params);
  • ... 是什么?
  • 扩展运算符是 ES6 的功能。它非常适合这种情况。

标签: javascript arrays node.js string-formatting


【解决方案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 库不会为多余的参数而烦恼。

【讨论】:

    【解决方案2】:

    您可以像这样编写自己的格式扩展:

    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);
    

    希望有帮助。

    【讨论】:

    • s.replace(reg, arguments[i + 1]); 应该是s.replace(reg, Array[i + 1]);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 2013-09-14
    相关资源
    最近更新 更多