遗漏的类型错误:项目不迭代

问题描述 投票:2回答:1

我的理解是,for...in回路的设计迭代的JavaScript对象。 See this postthis post.

看看下面的例子。这将返回“遗漏的类型错误:项目是不是可迭代的”在我的控制台。

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

为什么第一个例子需要一个数组,第二个没有?

javascript object for-loop for-in-loop
1个回答
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}`);
}
© www.soinside.com 2019 - 2024. All rights reserved.