这对我来说很好用:
const iterable = [1, 2, 3];
for (const value of iterable) {
console.log(value);
}
然而,这不起作用:
const iterable = {1:10, 2:20, 3:30};
for (const value of iterable) {
console.log(value);
console.log(iterable[value]);
}
反而给我错误:
Uncaught TypeError: iterable[Symbol.iterator] is not a function(…)
我该怎么做?
这就是我现在所做的:
for(const value in iterable){
if (iterable.hasOwnProperty(value)) {
console.log(value);
console.log(iterable[value]);
}
}
答案 0 :(得分:13)
for..of
仅适用于iterable objects。你可以实现这样的迭代器:
const iterable = {
[Symbol.iterator]() {
return {
i: 1,
next() {
if (this.i <= 3) {
return { value: 10 * this.i++, done: false };
}
return { value: undefined, done: true };
}
};
}
};
for (const value of iterable2) {
console.log(value);
} // 10, 20, 30
要迭代除for...in
之外的普通对象,我认为没问题,你可以使用Object.keys
:
const iterable = {1:10, 2:20, 3:30};
Object.keys( iterable ).forEach( key => {
console.log( iterable[key] );
}); // 10, 20, 30
BTW你的第一个例子引发语法错误,也许你的意思是const iterable = [1,2,3]
?然后它会起作用,因为Arrays是可迭代的对象。