无法迭代ES6 Map对象

时间:2020-04-04 02:10:09

标签: javascript reactjs es6-modules

我正在做一个简单的React项目。 我有这个Map对象books,其中book.id为键,book对象为值。因此,我可以创建一个Map对象,但不能使用for... offorEach来迭代Map。

这是代码的一部分

const books = this.props.readingBooks;

let KEYS = [];
let VALUES = [];
for (const book of books) {
    let [key, value] = book;
    KEYS.push(key);
    VALUES.push(value);
}

当我用完代码时,总是出现此错误:

enter image description here

1 个答案:

答案 0 :(得分:0)

我将在答案中写下这个内容,因为即使我们尚未完全弄清您的代码出了什么问题,我也需要向您展示一些代码。

首先,您显示的错误意味着某些代码正在尝试迭代那些不可迭代的对象。如果您断言错误来自class Deserialize { constructor(options) { this.options = options; this.leftovers = []; } get() { return axios.get(this.options.url).then((response) => { this.options.data = response.data; return this.populate(); }); } populate() { let inputs = document.querySelectorAll( this.options.form + " input, " + this.options.form + " textarea, " + this.options.form + " select" ); inputs.forEach((v, i) => { let name = v.name; let type = v.type; let data = this.options.data; data.forEach((i) => { if (i == name) { switch (type) { case "checkbox": v.checked = true; break; case "radio": if (v.value == data[i]) v.checked = true; break; case "select-one": case "textarea": case "text": case "tel": case "date": case "time": case "email": case "hidden": case "password": case "color": v.value = data[i]; break; } } else { this.leftovers.push(this.options.data[i]); } }); }); return this.leftovers; } } const deserialize = new Deserialize({ form: "#account-form", url: "/account/getAccountJson/", }) .get() .then(function (response) { console.log(response); });循环是正确的,则表明for/of不是可迭代的,因此不是Map对象。

通过这个简单的示例,您可以看到,如果books是合法的books对象,则您的代码可以正常工作。您可以在此片段中的此处运行它,并查看如果Map是正确的books对象,它可以正常工作。

Map

因此,const books = new Map([["key1", "val1"], ["key2", "val2"]]); let KEYS = []; let VALUES = []; for (const book of books) { let [key, value] = book; KEYS.push(key); VALUES.push(value); } console.log(KEYS); console.log(VALUES);不是您认为合适的books对象,或者您的真实代码中发生了其他事情,您没有在此处显示我们。