【问题标题】:Uncaught TypeError: items is not iterable未捕获的类型错误:项目不可迭代
【发布时间】:2018-12-25 15:18:07
【问题描述】:

我的理解是for...in 循环旨在迭代 Javascript 中的对象。 See this postthis post.

举个例子。这会在我的控制台中返回“Uncaught TypeError: items is not iterable”。

var text = {
  name: "Coptic",
  ranges: [[994, 1008], [11392, 11508], [11513, 11520]],
  direction: "ltr",
  year: -200,
  living: false,
  link: "https://en.wikipedia.org/wiki/Coptic_alphabet"
};

function dominantDirection(items) {
  for (let item of items) {
    if (item.direction === 'ltr') {
      return 'ltr';
    } else {
      return 'rtl';
    }
  }
}

console.log(dominantDirection(text));

如果我将对象包装在一个数组 [] 中,它可以正常工作。 但是,我的第二个示例按预期工作。

var object1 = {a: 1, b: 2, c: 3};
var string1 = "";

function loopObj() {
  for (var property1 in object1) {
    console.log(string1 = string1 + object1[property1]);
  }
}

console.log(loopObj());

为什么第一个例子需要数组而第二个不需要?

【问题讨论】:

  • text 不是一个数组!
  • 您的第一个代码示例使用for ... of 而不是for ... in
  • 两个 sn-ps 都在做完全不同的事情。第一种是遍历对象集合并在检查集合中第一个对象的方向后立即返回。第二个 sn-p 遍历传入对象的每个属性。
  • 在您的第一个示例中,您不必遍历 text 对象来检索方向(您基本上是在进行两级迭代)。只需通过items.direction 访问方向即可。
  • @Pointy 哇,我觉得很傻。谢谢!

标签: javascript object for-loop for-in-loop


【解决方案1】:

在您的第一个示例中,您使用了for..of,它不能用于对象,而是用于字符串和数组。要迭代对象,请使用 for..in 构造,或者使用 Object.keys() 将对象的键放入数组中。

使用Object.keys()的示例:

const text = {
  name: "Coptic",
  ranges: [[994, 1008], [11392, 11508], [11513, 11520]],
  direction: "ltr",
  year: -200,
  living: false,
  link: "https://en.wikipedia.org/wiki/Coptic_alphabet"
};

for (let key of Object.keys(text)) {
  
  console.log(`${key}: ${text[key]}`);
}

或者您也可以使用新的Object.entries() 来获取键和值,如下所示:

const text = {
  name: "Coptic",
  ranges: [[994, 1008], [11392, 11508], [11513, 11520]],
  direction: "ltr",
  year: -200,
  living: false,
  link: "https://en.wikipedia.org/wiki/Coptic_alphabet"
};

for (let [key, value] of Object.entries(text)) {
  
  console.log(`${key}: ${value}`);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-31
    • 2020-10-18
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    相关资源
    最近更新 更多