使用常规for循环替换for

Seb*_*lia 0 javascript oop loops for-loop object

我目前正在尝试用好奇的for循环替换for循环,但没有成功.我总是得到undefined.这甚至可以用javascript对象吗?

我循环的示例对象:

var el = {
    1: {type: "fish", commonName: "clownfish", scientificName: "sdasd", gender: "m", price: 1.99},
    2: {type: "fish", commonName: "dragonfish", scientificName: "dada", gender: "f", price: 2.99}
};
Run Code Online (Sandbox Code Playgroud)

我的工作方式:

for (var element in el) {
   if (el[element].type === type && el.hasOwnProperty(element)) {
       elementNum++;
   }
}
Run Code Online (Sandbox Code Playgroud)

简单的for循环方法总能让我Cannot read property 'type' of undefined:

for(var i = 0, x = Object.keys(el).length; i < x; i++) {
   if (el[i].type === type && el.hasOwnProperty(i)) {
      elementNum++;
   }
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*zer 6

0当你在整个对象中的第一个键时,你就开始循环了1.

var el = {
  1: {
    type: "fish",
    commonName: "clownfish",
    scientificName: "sdasd",
    gender: "m",
    price: 1.99
  },
  2: {
    type: "fish",
    commonName: "dragonfish",
    scientificName: "dada",
    gender: "f",
    price: 2.99
  }
};

var keyLength = Object.keys(el).length;

// I've simplified the for loop
for (var i = 1; i <= keyLength; i++) {
  console.log(el[i].commonName);
}
Run Code Online (Sandbox Code Playgroud)