Распаковка в JavaScript как в Python - PullRequest
26 голосов
/ 16 августа 2011

У меня есть следующая строка

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

Тогда я JSON.parse it

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, которая делает это?

Ответы [ 3 ]

40 голосов
/ 16 августа 2011

После того, как вы собрали аргументы функции в массиве, вы можете использовать метод apply() объекта функции, чтобы вызвать с ним предопределенную функцию:

   some_javascript_function.apply(this, my_args)

Первый параметр (this) устанавливает контекст вызываемой функции.

26 голосов
/ 27 июля 2016

Вы можете достичь этого, сделав это some_javascript_function(...my_args)

Это называется spread операция (так как unpacking в Python). просмотреть документы здесь https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_operator

2 голосов
/ 28 апреля 2019

Распаковать используя "..."

Так же, как вы принимаете неограниченное количество аргументов, вы можете распаковать их.

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);

Отправить аргументы

...