Это простая проблема, и я сделал это раньше. Я просто не могу вспомнить, как, или что именно это называлось.
В python я могу это сделать:
arr = ['one', 'two']
one, two = arr
как это сделать в JavaScript?
Это простая проблема, и я сделал это раньше. Я просто не могу вспомнить, как, или что именно это называлось.
В python я могу это сделать:
arr = ['one', 'two']
one, two = arr
как это сделать в JavaScript?
В настоящее время это единственное совместимое с кросс-браузером решение AFAIK:
var one = arr[0],
two = arr[1];
ES6 разрешает назначение деструктуризации:
let [x, y] = ['foo', 'bar'];
console.log(x); // 'foo'
console.log(y); // 'bar'
Или, чтобы придерживаться вашего первоначального примера:
var arr = ['one', 'two'];
var [one, two] = arr;
Вы также можете создать значение по умолчанию:
const [one = 'one', two = 'two', three = 'three'] = [1, 2];
console.log(one); // 1
console.log(two); // 2
console.log(three // 'three'
Это назначение деструкции. Вы можете сделать это в некоторых браузерах со следующим синтаксисом:
[one, two] = arr;
Он поддерживается в некоторых из последних браузеров и транспилеров, таких как Babel и Traceur. Это была функция, введенная с ECMAScript 4, которая позже стала ECMAScript Harmony, которая в конечном итоге стала ES 2015.
Вы можете использовать функцию применения массива, если хотите, чтобы элементы массива передавались как аргументы функции.
В CoffeeScript есть: http://jashkenas.github.com/coffee-script/#pattern_matching
И, процитированный в верхней части страницы:
"CoffeeScript - это маленький язык, который компилируется в JavaScript. Подумайте об этом как о менее скромном детском брате с JavaScript - о тех же генах, примерно одинаковой высоты, но о другом стиле. Помимо горстки бонусов, заявления в CoffeeScript соответствуют друг другу с их эквивалентом в JavaScript, это просто еще один способ сказать это."
var one = arr[0];
var two = arr[1];
Реализация серьезной идеи.
http://jsfiddle.net/RichAyotte/6D2wP/
(function(a, b, c, d) {
console.log(a, b, c, d);
}.apply(this, ['a', 'b', 'c', 'd']));
Вопрос довольно старый, но я хотел бы опубликовать это альтернативное решение (2016): можно также использовать оператор спреда "...".
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator
let xAndY = [42, 1337];
let f = function(x, y) { return x + y; };
f(...xAndY);