Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将中的替换为具有对象的常规for循环_Javascript_Loops_Oop_Object_For Loop - Fatal编程技术网

Javascript 将中的替换为具有对象的常规for循环

Javascript 将中的替换为具有对象的常规for循环,javascript,loops,oop,object,for-loop,Javascript,Loops,Oop,Object,For Loop,出于好奇,我目前正试图用一个常规的for-in循环来替换现有的for-in循环,但没有成功。我总是得到未定义的。javascript对象也可以这样做吗 示例对象I循环: var el = { 1: {type: "fish", commonName: "clownfish", scientificName: "sdasd", gender: "m", price: 1.99}, 2: {type: "fish", commonName: "dragonfish", scienti

出于好奇,我目前正试图用一个常规的for-in循环来替换现有的for-in循环,但没有成功。我总是得到未定义的
。javascript对象也可以这样做吗

示例对象I循环:

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}
};
我的工作方式:

for (var element in el) {
   if (el[element].type === type && el.hasOwnProperty(element)) {
       elementNum++;
   }
}
“简单for循环”方法总是让我
无法读取未定义的属性“type”:

for(var i = 0, x = Object.keys(el).length; i < x; i++) {
   if (el[i].type === type && el.hasOwnProperty(i)) {
      elementNum++;
   }
}
for(var i=0,x=Object.keys(el.length;i
您正在从
0
开始循环,而整个对象中的第一个关键点是
1

var el={
1: {
类型:“鱼”,
俗名:“小丑鱼”,
科学名称:“sdasd”,
性别:“m”,
售价:1.99
},
2: {
类型:“鱼”,
俗名:“龙鱼”,
学名:“达达”,
性别:“f”,
售价:2.99
}
};
var keyLength=Object.keys(el).length;
//我简化了for循环

对于(var i=1;i您将从
0
开始循环,而整个对象中的第一个关键点是
1

var el={
1: {
类型:“鱼”,
俗名:“小丑鱼”,
科学名称:“sdasd”,
性别:“m”,
售价:1.99
},
2: {
类型:“鱼”,
俗名:“龙鱼”,
学名:“达达”,
性别:“f”,
售价:2.99
}
};
var keyLength=Object.keys(el).length;
//我简化了for循环

对于(var i=1;i,我建议直接迭代对象的键

函数getCount(类型){
返回Object.keys(el).reduce(函数r,k){
返回r++(el[k].type==type);
}, 0);
}
var el={1:{类型:“鱼”,通用名:“小丑鱼”,科学名:“sdasd”,性别:“m”,价格:1.99},2:{类型:“鱼”,通用名:“龙鱼”,科学名:“达达”,性别:“f”,价格:2.99};

log(getCount('fish');
我建议直接迭代对象的键

函数getCount(类型){
返回Object.keys(el).reduce(函数r,k){
返回r++(el[k].type==type);
}, 0);
}
var el={1:{类型:“鱼”,通用名:“小丑鱼”,科学名:“sdasd”,性别:“m”,价格:1.99},2:{类型:“鱼”,通用名:“龙鱼”,科学名:“达达”,性别:“f”,价格:2.99};

控制台。日志(GETCOUNT(‘FISH’));< /代码>答案不能更短。好!该死,我怎么看不到这个…谢谢!@塞布塞利拉,我会认为有时候我的思维就像一个语言提示工具(JSHITEN,JSLLT……)lol@Matíasfidemrazier hehe^^与原始的
for(el中的var元素)相比,这种方法有什么好处{ <代码> >方法?答案不能更短。好!该死的,我怎么看不到这个…谢谢!@塞布塞利拉,我想我的大脑有时就像一个语言提示工具(JSHITEN,JSLLT……)lol@Matíasfidemrazier hehe^^与原始的
for(el中的var元素)相比,这种方法有什么好处{
method?@Matias的答案是正确的,但我想知道为什么不使用数组?是否会跳过某些索引或其他什么?另外,请切换
(el[I].type==type&&el.hasOwnProperty(I))
的顺序,以便在
el[I]
不存在时,它不会检查
.type
(因为javascript会停止查看
if和
语句,如果它发现一个语句为false。@Matias的答案是正确的,但我想知道为什么不使用数组?是否会跳过某些索引或其他什么?另外,请切换
(el[I].type==type&&el.hasOwnProperty(I))的顺序)
这样它就不会检查
。键入
if
el[i]
不存在(因为javascript会停止查看
if和
语句,如果它发现一个语句为false。是的,我也知道这种方法。我只是想尝试使用一个简单的for循环来实现它。)感谢您的回答!只有当对象的键使用固定符号(如索引)时,它才起作用。是的,我也知道这种方法。我只是想尝试使用简单的for循环来实现它。;)谢谢您的回答!只有当对象的键使用固定符号(如索引)时,它才起作用。