2015-12-21 2 views
6

Я читал this пример использования for.. of петли на карте, и я был немного смущен с этим синтаксисом:Использование for..of петли на ES6 Карта

var myMap = new Map(); 
myMap.set(0, "zero"); 
myMap.set(1, "one"); 

for (var [key, value] of myMap) { 
    console.log(key + " = " + value); 
} 

В частности, я не понимаю разрушение массива, которое происходит. Я понимаю, что вы можете использовать деструктурирование массива, чтобы сделать что-то вроде let [one, two] = [1, 2];, но что происходит в этом примере? myMap - это не массив, так почему это дает правильные значения?

Другой вопрос, у меня есть, почему порядок key, value в деструктуризации, но когда вы делаете forEach() заказ value, key, как здесь:

myMap.forEach((value, key) => { 
    console.log(key + " = " + value); 
}); 

ответ

10
for (var [key, value] of myMap) { 
    console.log(key + " = " + value); 
} 

, как

for (let pair of myMap) { 
    var [key, value] = pair; 
    console.log(key + " = " + value); 
} 

Значит, это не myMap, который должен быть массивом для деструктуризации для работы; скорее, каждый из его элементов должен быть массивом, когда он повторяется, и итерация по карте действительно создает массивы (пары ключ/значение).

Map#forEach аргумент аргумента, вероятно, согласован с Array#forEach, который вызывает функцию с аргументами (item, index); это, в свою очередь, вероятно, делает это, потому что вам не всегда нужен индекс.

+0

Благодарим вас за простую и ясную информацию! – saadq

+0

Простой и понятный. – void

2

myMap не является массивом, так почему это дает правильные значения? Прототип

МАП имеет [Symbol.iterator] свойство, которое означает экземпляры карты реализации iterator contract.

for of Петли используют итераторы для перебора объектов.

Другими словами, для петель не нужны массивы, им нужны итерации. Массивы - это всего лишь один тип итераций, другие карты.

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

Смежные вопросы