带有关键字参数的Javascript字符串

带有关键字参数的Javascript字符串,javascript,string,parameters,keyword,Javascript,String,Parameters,Keyword,我非常怀念RubyonRails上的一个简单特性:strings关键字参数,如下所示: "the key '%{key}' has a value of '%{value}'" % {:key => 'abc', :value => 5} 在javascript中,您必须对许多字符串求和,这使得代码难看且难以编写 这里有好的图书馆吗?我对sprintf之类的东西不感兴趣。您可以制作一个基本的数组类型格式化程序: String.prototype.format = function(

我非常怀念RubyonRails上的一个简单特性:strings关键字参数,如下所示:

"the key '%{key}' has a value of '%{value}'" % {:key => 'abc', :value => 5}
在javascript中,您必须对许多字符串求和,这使得代码难看且难以编写


这里有好的图书馆吗?我对sprintf之类的东西不感兴趣。

您可以制作一个基本的数组类型格式化程序:

String.prototype.format = function(obj) {
  return this.replace(/%\{([^}]+)\}/g,function(_,k){ return obj[k] });
};

"the key '%{key}' has a value of '%{value}'".format({ key:'abc', value:5 });
String.prototype.format = function(args) {
    var str = this,
        idxRx = new RegExp("{[0-9]+}", "g");
    return str.replace(idxRx, function(item) {
        var val = item.substring(1, item.length - 1),
            intVal = parseInt(val, 10),
            replace;
        replace = args[intVal];
        return replace;
    });
};
用法:

'{1} {0} and {2}!'.format(["collaborate", "Stop", "listen"])
// => 'Stop collaborate and listen!'

您可以创建一个基本数组类型格式化程序:

String.prototype.format = function(args) {
    var str = this,
        idxRx = new RegExp("{[0-9]+}", "g");
    return str.replace(idxRx, function(item) {
        var val = item.substring(1, item.length - 1),
            intVal = parseInt(val, 10),
            replace;
        replace = args[intVal];
        return replace;
    });
};
用法:

'{1} {0} and {2}!'.format(["collaborate", "Stop", "listen"])
// => 'Stop collaborate and listen!'

那么像这样的模板引擎呢?这是一个微观优化问题。在我看来,专注于更具体的事情。确实有,但这对你来说可能太过分了。让我们做一些类似于
“Yo{name},你签出了{languagethattcompilestojavascript}了吗?”
只是说:)@bfvaretto模板系统对于简单的字符串替换来说太难了。已经在使用下划线模板了,这是一个微观优化问题。在我看来,专注于更具体的事情。确实有,但这对你来说可能太过分了。让我们做一些类似于
“Yo{name},你签出了{languagethattcompilestojavascript}了吗?”
只是说:)@bfvaretto模板系统对于简单的字符串替换来说太难了。已经在使用下划线模板,您可以将所有这些减少为
返回这个。通常你会使用
参数
数组tho来实现这一点,因此你可以传递无限多的参数并将其映射到占位符,而不是使用额外的数组。你可以将所有这些减少到
返回这个。替换(/\{(\d+)}/g,函数({uN,n){return args[+n]})。通常,您会使用
参数
数组tho执行此操作,因此您可以传递无限多个参数并将其映射到占位符,而不是使用额外的数组。不过,您应该将其称为其他名称,因为doug crockford在ecma6的摘要中列出了本机“”。格式…您应该将其称为其他名称,由于doug crockford在ecma6的摘要中列出了本机“”格式。。。