用JavaScript解压缩类似Python

Kit*_*Kit 29 javascript unpack

我有以下字符串

output_string = "[10, 10, [1,2,3,4,5], [10,20,30,40,50]]"
Run Code Online (Sandbox Code Playgroud)

然后,我JSON.parse

my_args = JSON.parse(output_string)
Run Code Online (Sandbox Code Playgroud)

我如何以类似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])
Run Code Online (Sandbox Code Playgroud)

是否有一个核心的JavaScript成语呢?

fbu*_*ger 40

一旦在数组中收集了函数参数,就可以使用apply()函数对象的方法来调用预定义的函数:

   some_javascript_function.apply(this, my_args)
Run Code Online (Sandbox Code Playgroud)

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

  • `.apply`运行良好,但`.call`并没有用'Array`参数来命中它.谢谢,你指出我正确的方向.本文,[JavaScript中的函数应用和函数调用](http://odetocode.com/blogs/scott/archive/2007/07/05/function-apply-and-function-call-in-javascript.aspx)看起来有趣. (2认同)
  • 请注意,这不适用于`console.log.apply(...)`.那应该使用`console.log.apply(console,arguments)`.请参阅[此问题](http://stackoverflow.com/questions/8159233/typeerror-illegal-invocation-on-console-log-apply). (2认同)

ife*_*aju 29

你可以通过这样做来实现这一目标 some_javascript_function(...my_args)

这称为spread操作(unpacking在python中).在这里查看文档https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_operator


jos*_*ell 11

使用“...”解包

与接受无限参数的方式相同,您可以解压缩它们。

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

console.log(vals);    // [1, 2, "a", "b"]
console.log(...vals); // 1 2 "a" "b"
Run Code Online (Sandbox Code Playgroud)

示例:在函数中接受无限参数

它会变成一个数组

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');
Run Code Online (Sandbox Code Playgroud)

示例:将参数数组发送到函数中

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

let vals = [1, 2, 'a', 'b'];
someFunc(...vals);
Run Code Online (Sandbox Code Playgroud)

发送参数