未捕获的TypeError:项目不可迭代

时间:2018-07-17 20:15:59

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

我的理解是O(n log n)循环旨在遍历Javascript中的对象。 See this postthis post.

采用以下示例。这将在我的控制台中返回“未捕获的TypeError:项目不可迭代”。

for...in

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

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));

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

1 个答案:

答案 0 :(得分:3)

在第一个示例中,您使用了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}`);
}