Python-подобная распаковка в JavaScript
У меня есть следующая строка
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, которая делает это?
Ответы
Ответ 1
После того, как вы собрали аргументы функции в массиве, вы можете использовать метод apply()
объекта функции для вызова вашей предопределенной функции с помощью:
some_javascript_function.apply(this, my_args)
Первый параметр (this
) задает контекст вызываемой функции.
Ответ 2
Вы можете добиться этого, сделав это
some_javascript_function(...my_args)
Это называется операцией spread
(поскольку unpacking
находится в python).
просмотреть документы здесь https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_operator
Ответ 3
Распаковать используя "..."
Так же, как вы принимаете неограниченное количество аргументов, вы можете распаковать их.
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); // 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);
Отправить аргументы