web-dev-qa-db-ja.com

JavaScriptでのPythonのような解凍

私は次の文字列を持っています

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

それから私はJSON.parseそれ

my_args = JSON.parse(output_string)

my_argsのすべての要素がJavaScript関数の引数になるように、Pythonのような方法で解凍するにはどうすればよいですか?

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イディオムはありますか?

29
Kit

配列に関数の引数を収集したら、関数オブジェクトのapply()メソッドを使用して、事前定義された関数を呼び出すことができます。

   some_javascript_function.apply(this, my_args)

最初のパラメーター(this)は、呼び出された関数のコンテキストを設定します。

41
fbuchinger

これを行うことでそれを達成することができますsome_javascript_function(...my_args)

これはspread操作と呼ばれます(unpackingはPythonであるため)。ここでドキュメントを表示 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_operator

28

「...」を使用して開梱

無制限の引数を受け入れるのと同じ方法で、それらを解凍できます。

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"
}

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

例:引数の配列を関数に送信する

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

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

引数を送信する

3
joshuakcockrell