Javascript forEach is not a function

发生这种情况的原因是我们试图迭代一个对象;是的,它可能看起来像一个关联数组,但它实际上是一个对象。

有多种方式可以将索引数组无意中转换为对象;发生这种情况的一种方式是,如果我们以某种方式从后端的“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