我想将数组元素传递给bob bob.string.formatString格式字符串,以便我可以传递任意数量的参数,它会自动填充占位符中的必需参数。这是我尝试过的。
var string = "Hi {0} and {1}.";
var x = "Hello";
var y = "world";
var result = test(string ,[x,y] )
function test(string ,args){
//return bob.string.formatString(string, args[0] , args[1]); -> This gives me correct output
str = bob.string.formatString.apply(string , args);
console.log("final string:" + str); // --> This gives me only Hello
我希望“嗨你好,世界”作为输出。
答案 0 :(得分:1)
apply
的第一个参数是thisArg
。它为该函数调用提供this
的值。而不是:
str = bob.string.formatString.apply(string , args);
你应该用:
来打电话str = bob.string.formatString.apply(null, [string].concat(args));
// or
str = bob.string.formatString.apply(bob.string, [string].concat(args));
您还可以将您的功能定义为:
function test(string) {
var args = [].slice.call(arguments, 1);
str = bob.string.formatString.apply(null, [string].concat(args));
console.log("final string:" + str);
}
这也需要1到N个参数并将它们传递给formatString
。在ES6中,您可以使用官方休息参数:
function test(string, ...args) {
str = bob.string.formatString(string, ...args);
console.log("final string:" + str);
}