NodeJS 类型错误:.for不可迭代/ array[Symbol.iterator]().next().value不可迭代

31moq8wy  于 2023-02-08  发布在  Node.js
关注(0)|答案(2)|浏览(186)

给定以下代码:

let arr = await fetch(...).then(r => r.json());
for(let [a, b] of arr) {
  console.log(a, b);
}

是什么原因导致Chromium/Node. js中出现隐含/无用的错误消息.for is not iterable?在Firefox中,错误消息为Uncaught TypeError: arr[Symbol.iterator]().next().value is not iterable
这让我困惑了几分钟,所以我想在他们把这些错误信息变得更友好之前,有一个SO问题/答案会很有帮助。

c9qzyr3d

c9qzyr3d1#

出现此错误的原因是数组包含非数组-例如,它可能包含如下对象:

let arr = [{a:1, b:2}, {a:3, b:4}];

因此for/of代码应该如下所示:

for(let {a, b} of arr) {
  console.log(a, b);
}
nfs0ujit

nfs0ujit2#

我找到了这个案子的一个很好的答案
需要ES6且仅适用于阵列:

for (const [i, value] of myArray.entries()) {
    console.log('%d: %s', i, value);
}

对于任何类型的可迭代对象:

function* enumerate(iterable) {
    let i = 0;

    for (const x of iterable) {
        yield [i, x];
        i++;
    }
}

for (const [i, obj] of enumerate(myArray)) {
    console.log(i, obj);
}

相关问题