发生这种情况的原因是我们试图迭代一个对象;是的,它可能看起来像一个关联数组,但它实际上是一个对象。
有多种方式可以将索引数组无意中转换为对象;发生这种情况的一种方式是,如果我们以某种方式从后端的“1”而不是“0”开始创建索引——至少这是我从 PHP 创建 JSON 数组时导致它的原因。
有两种方法可以解决。
- 最好的解决方案是确保我们开始使用正确的数据类型;为了让 forEach 方法工作,我们应该使用 JavaScript 数组。
- 另一种解决方案是使用 Object.entries() 方法。
let persons = { a: 'Jacob', b: 'Daniel' }; for (let [key, name] of Object.entries(persons)) { console.log(key + ': ' + name); }
以上将创建一个对象并对其进行迭代。
相反,如果我们想使用 forEach 方法,则应在构建数据结构时省略键:
let persons = [ 'Jacob', 'Daniel' ]; persons.forEach((name, key) => { console.log(key + ': ' + name); });
当 JSON 数据来自 PHP 时,也可能出现这样的问题
假设我们使用 PHP 的 json_encode 函数创建一个 JSON 数组以在前端使用。
在 PHP 中一般数组索引从 0 开始,如果我们从1开始创建数组,然后解析JSON
这个微小的细节导致 json_encode 函数输出一个 JSON 对象而不是一个 JSON 数组;问题在于 JavaScript 中的 forEach 只适用于数组——对象上没有 forEach 方法!
日期:2020-06-02 22:16:52 来源:oir作者:oir