JavaScript: разбить массив на отдельные переменные - PullRequest
2 голосов
/ 12 января 2011

Учитывая эту структуру данных:

var vehicles = [
  [ "2011","Honda","Accord" ],
  [ "2010","Honda","Accord" ],
  .....
];

Циклически просматривая каждый элемент транспортных средств , существует ли способ переназначения элементов массива отдельным переменным в одном кадре, например:

for (i = 0; i < vehicles.length; i++) {
  var(year,make,model) = vehicles[i]; // doesn't work
  .....
}

... Я пытаюсь уйти от выполнения:

for (i = 0; i < vehicles.length; i++) {
  var year = vehicles[i][0];
  var make = vehicles[i][1];
  var model = vehicles[i][2];
  .....
}

Просто любопытно, поскольку этот тип вещей доступен на других языках программирования. Спасибо!

Ответы [ 4 ]

4 голосов
/ 12 января 2011

Нет, к сожалению, в настоящее время нет способа сделать это в XBrowser. (что я знаю).

Относительно скоро это возможно через браузер, см. Ссылку:

https://developer.mozilla.org/en/New_in_JavaScript_1.7

(В PHP есть "список", который будет делать именно то, что вы хотите, пока ничего похожего на XBrowser для javascript)

Конечно, относительно скоро это может что-то значить и т. Д. (Спасибо, Феликс, за указание на мои ошибки в этом)

1 голос
/ 30 сентября 2018

Теперь возможно использовать деструктурирование массива в ES6.

Начиная с документов:

Синтаксис назначения деструктурирования - это выражение JavaScript, позволяющее распаковывать значения из массивов илисвойства из объектов в различные переменные.

Рассмотрим следующий пример:

let [a, b, c] = [10, 20, 30];

console.log(a);  // output => 10
console.log(b);  // output => 20
console.log(c);  // output => 30

Как и в случае с вашими данными, метод .forEach() также можно использовать для перебора элементов массива вместе с разрушением массива:

let vehicles = [
  [ "2011","Honda","Accord" ],
  [ "2010","Honda","Accord" ]
];

vehicles.forEach(([year, make, model], index) => {
  // ... your code here ...
  console.log(`${year}, ${make}, ${model}, ${index}`);
});

Список литературы:

1 голос
/ 12 января 2011

Самая близкая альтернатива, о которой я мог подумать, - это использовать функцию и использовать apply() для ее вызова.Передав массив, он будет передан в качестве каждого аргумента.

function vehicle(year, make, model) {
    // do stuff
}

for (i = 0; i < vehicles.length; i++) {
    vehicle.apply (this, vehicles[i]);
}

Или анонимная функция:

for (i = 0; i < vehicles.length; i++) {
    (function(year, make, model) {
        // do stuff
    }).apply(this, vehicles[i]);
}
1 голос
/ 12 января 2011

Вероятно, самое близкое, что вы в настоящее время получите в javascript, - это исключить лишний var и отделить операторы запятым.

for (i = 0; i < vehicles.length; i++) {
  var year = vehicles[i][0], make = vehicles[i][1], model = vehicles[i][2];
  .....
}

, или вы можете сократить его чуть больше так:

for (i = 0; i < vehicles.length; i++) {
  var v = vehicles[i], year = v[0], make = v[1], model = v[2];
  .....
}
...