Я хотел бы установить свойство options[Symbol.iterator]
для повторения простых объектов, которые я создаю с помощью оператора for...of
:
options = {
male: 'John',
female: 'Gina',
rel: 'Love'
};
for(let p of options){
console.log(`Property ${p}`);
};
Но этот код дает мне следующую ошибку:
array.html:72 Uncaught TypeError: options[Symbol.iterator] is not a function
Как я могу установить правильную функцию итератора для простого объекта, как указано выше?
Решено
// define the Iterator for the options object
options[Symbol.iterator] = function(){
// get the properties of the object
let properties = Object.keys(this);
let count = 0;
// set to true when the loop is done
isDone = false;
// define the next method, need for iterator
let next = () => {
// control on last property reach
if(count >= properties.length){
isDone = true;
}
return {done:isDone, value: this[properties[count++]]};
}
// return the next method used to iterate
return {next};
};
И теперь я могу использовать оператор for...of
для своего объекта:
for(let property of options){
console.log(`Properties -> ${property}`);
}
for...of
, коллекция должна иметь свойство[Symbol.iterator]
. Литералы объектов не имеют такого свойства, только массивы, наборы, карты и т. д. - person adeneo   schedule 06.03.2016Map
для этого. - person Bergi   schedule 06.03.2016