2013-12-19 123 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"); 
}