Розпакування масиву в окремі змінні в JavaScript


141

Це проста проблема, і я це робив раніше. Я просто не пам'ятаю, як, або як саме це називалося.

У python я можу це зробити:

arr = ['one', 'two']
one, two = arr

як це зробити в JavaScript?

Відповіді:


173

Наразі це єдине сумісне з браузером рішення 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'

5
завдання з деструктуризації на сьогодні має повну підтримку kangax.github.io/compat-table/es6/#test-destructuring
grandrew

20

Це руйнування завдання . Ви можете зробити це в деяких браузерах із таким синтаксисом:

[one, two] = arr;

Він підтримується в деяких останніх браузерах і транспіляторах, таких як Babel і Traceur . Ця функція була представлена ​​разом із ECMAScript 4, який згодом став ECMAScript Harmony, який згодом став ES 2015.


Схоже, це частина ES6 (2015), а не ES4? ecma-international.org/ecma-262/6.0 / ...
джеб

@jab: спасибі! іноді ці старі відповіді забувають і застарівають, хоча, схоже, Матіас уже додав цю інформацію до своєї відповіді :)
Енді Е


6

Ви можете використовувати функцію застосування масиву, якщо ви хочете, щоб елементи масиву передавались як аргументи функції.


4
Я не впевнений, що у JavaScript Arrayє .apply()функція. Я думаю, ти мав на увазі some_function.apply(this, my_array). Дивіться цю відповідь
Кіт


2
var one = arr[0];
var two = arr[1];

1
Вам слід реально використовувати, varщоб запобігти забрудненню змінних глобальної сфери.
Матіас Байненс

Я просто припускаю його всі заявлені змінні :)
rob waminal

Напевно, краща ідея оголосити всі vars для кожної області за один раз, а не мати дві окремі varдекларації.
Mathias Bynens

2

CoffeeScript має: http://jashkenas.github.com/coffee-script/#pattern_matching

І, цитується вгорі сторінки:

"CoffeeScript - це невелика мова, яка збирається в JavaScript. Подумайте про це як менш показового брата-немовляти JavaScript - ті самі гени, приблизно однаковий зріст, але різний сенс стилю. Крім кількох бонусних приємностей, заяви в CoffeeScript відповідають одній -для одного з їхнім еквівалентом у JavaScript, це просто інший спосіб сказати це ".


1
Це не відповідає на запитання. Я розумію, що в CoffeeScript є деякі акуратні речі, але питання стосується Javascript.
Hovis Biddle

Мертва посилання: ((((
Пол Дрейпер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.