JavaScript中类似Python的解包功能

38

我有以下字符串

output_string = "[10, 10, [1,2,3,4,5], [10,20,30,40,50]]"

然后我对它进行JSON.parse操作

my_args = JSON.parse(output_string)

我该如何以类似Python的方式解包my_args,使得其中每个元素都成为JavaScript函数的一个参数?

some_javascript_function(*my_args)
// should be equivalent to:
some_javascript_function(my_args[0],my_args[1],my_args[2],my_args[3])
// or:
some_javascript_function(10, 10, [1,2,3,4,5], [10,20,30,40,50])

有没有一种核心的JavaScript语言习惯用法可以做到这一点?


将数组解包为JavaScript中的单独变量 - arunkumar
@arunkumar,对于那个问题,这个回答看起来很有趣,这使得这个问题略有不同。我们能否对函数参数做类似的操作? - Kit
抱歉,你是对的。这不是重复的。而且似乎在下面的答案中有一种方法可以做到这一点。我会删除早期的评论,因为它不相关。 - arunkumar
3个回答

42

如果您已经将函数参数收集到数组中,您可以使用函数对象的apply()方法来调用预定义的函数:

   some_javascript_function.apply(this, my_args)

第一个参数 (this) 设置被调用函数的上下文。


2
.apply 运行良好,但 .call 在使用 Array 参数时不太适用。谢谢,你指引了我正确的方向。这篇文章,JavaScript 中的 Function apply 和 function call 看起来很有趣。 - Kit
2
请注意,这对于 console.log.apply(...) 是不起作用的。应该使用 console.log.apply(console, arguments)。请参见此问题 - 4Z4T4R

41

13

使用“…”进行解包

你可以像接受无限参数一样解包它们。

let vals = [1, 2, 'a', 'b'];

console.log(vals);    // [1, 2, "a", "b"]
console.log(...vals); // 1 2 "a" "b"

示例:将无限参数传递到函数中

它将变成一个列表。

const someFunc = (...args) => {
    console.log(args);    // [1, 2, "a", "b"]
    console.log(args[0]); // 1
    console.log(...args); // 1 2 "a" "b"
}

someFunc(1, 2, 'a', 'b');

例子:将参数列表传递给函数

const someFunc = (num1, num2, letter1, letter2) => {
    console.log(num1);    // 1
    console.log(letter1); // "a"
}

let vals = [1, 2, 'a', 'b'];
someFunc(...vals);

发送参数


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接