Самый простой способ назначения массива отдельным объектам в машинописном тексте? [Дубликат]

Из стандарта JSON :

Объектом является неупорядоченный набор из нуля или более пар имен / значений, где имя - это строка, а значение - строка, число, логическое значение, нуль, объект или массив.

(выделение мое).

Итак, нет, вы не можете гарантировать заказ.

86
задан JoseK 6 August 2010 в 10:53
поделиться

7 ответов

В настоящее время это единственное совместимое с кросс-браузером решение 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'
109
ответ дан Dinoguy1000 17 August 2018 в 09:42
поделиться

Это назначение деструктурирования . Вы можете сделать это в некоторых браузерах со следующим синтаксисом:

[one, two] = arr;

Он поддерживается в некоторых из последних браузеров и транспилеров, таких как Babel и Traceur , Это была особенность, введенная с ECMAScript 4, которая позже стала ECMAScript Harmony, которая в конечном итоге стала ES 2015.

10
ответ дан Andy E 17 August 2018 в 09:42
поделиться
  • 1
    Похоже, что это часть ES6 (2015), а не ES4? [Д0] ecma-international.org/ecma-262/6.0/… – jab 18 August 2016 в 16:07
  • 2
    @jab: спасибо! иногда эти старые ответы забываются и устаревают, хотя похоже, что Матиас уже добавил эту информацию к его ответу :) – Andy E 19 August 2016 в 15:26

Вопрос довольно старый, но я хотел бы опубликовать это альтернативное решение (2016): можно также использовать оператор spread «...».

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);
6
ответ дан Chris K. 17 August 2018 в 09:42
поделиться

CoffeeScript имеет это: http://jashkenas.github.com/coffee-script/#pattern_matching

И, цитируется в верхней части страницы:

«CoffeeScript - это небольшой язык, который компилируется в JavaScript. Подумайте об этом как о менее выдающемся детском брате JavaScript, так и о тех же генах, примерно одинаковой высоты, но о другом стиле. Помимо нескольких бонусов, заявления в CoffeeScript соответствуют друг другу с их эквивалентом в JavaScript, это просто еще один способ сказать это ».

2
ответ дан Jakob 17 August 2018 в 09:42
поделиться
  • 1
    Это не отвечает на вопрос. Я ценю, что у CoffeeScript есть некоторые опрятные вещи, но вопрос о Javascript. – Hovis Biddle 25 March 2016 в 20:26
  • 2
    Мертвая ссылка: (((( – Paul Draper 11 October 2016 в 07:04

Реализация идеи серьезного.

http://jsfiddle.net/RichAyotte/6D2wP/

(function(a, b, c, d) {
    console.log(a, b, c, d);   
}.apply(this, ['a', 'b', 'c', 'd']));
3
ответ дан Richard Ayotte 17 August 2018 в 09:42
поделиться
  • 1
    Этот день сделал мой день. Распаковка списков через заявку, хорошо сделанный сэр! – mike239x 23 June 2018 в 17:43
var one = arr[0];
var two = arr[1];
2
ответ дан rob waminal 17 August 2018 в 09:42
поделиться
  • 1
    Вы действительно должны использовать var, чтобы предотвратить загрязнение глобальных переменных. – Mathias Bynens 6 August 2010 в 10:25
  • 2
    Я просто принимаю все свои объявленные переменные :) – rob waminal 6 August 2010 в 10:27
  • 3
    Вероятно, лучше всего объявить все var s для каждой области за один раз, вместо того, чтобы иметь два отдельных объявления var. – Mathias Bynens 7 August 2010 в 10:38

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

6
ответ дан serious 17 August 2018 в 09:42
поделиться
  • 1
    Я не уверен, что JavaScript Array имеет функцию .apply(). Я думаю, вы имели в виду some_function.apply(this, my_array). См. Этот ответ – Kit 16 August 2011 в 12:56
Другие вопросы по тегам:

Похожие вопросы: