2013-12-19 85 views
-1

我已经创建了for循环,并试图理解为什么当我运行它时,控制台会记录2x“我们知道了”。似乎如果我循环遍历你,只希望它只记录一次,如果它发现一次属性。for循环找到属性

也是一个JS新手,所以如果你有我的格式,总是赞赏任何反馈。节日快乐!

var obj = { 
    company: 'planters', 
    peanuts: 'plain' 
}; 

for (var key in obj) { 
    if (obj.hasOwnProperty('peanuts')) { 
    console.log('We got it'); 
    } else { 
    console.log("We cant find it"); 
    } 
}; 
+0

你在'if'语句中没有对当前键进行任何操作。 – Barmar

+0

在不同的笔记上,你不想为/ in,你实际上需要'Object.keys(obj).forEach(...)'。 for /通常需要你首先执行一个'if(obj.hasOwnProperty(key))'检查你是在处理一个本地属性还是一个继承的属性。这个需求(和问题)不会发生在Object.keys上 –

回答

2

所发生的事情是你环路,2次迭代(这是物体的长度),如果找对象有属性peanuts,这是在两种情况下真正的原因。

1

for循环是不必要的。你没有使用key。它只是等同于运行for循环体的对象(和父母)中键的次数。

尝试

for (var key in obj) { 
    if (obj.hasOwnProperty(key)) { // you mean this 
    console.log('We got ', key); 
    } else { 
    console.log("We cant find it"); 
    } 
}; 

,看看有什么更好的在这里怎么回事。

0

如果你正在寻找一个特定的密钥,你必须将它与key进行比较。

var found = false; 
for (var key in obj) { 
    if (obj.hasOwnProperty(key) && key == 'peanuts') { 
     console.log('We got it'); 
     found = true; 
     break; 
    } 
} 
if (!found) { 
    console.log("We can't find it"); 
}