我有對象在JavaScript:
var object = someobject;
Object { aaa=true, bbb=true, ccc=true }
如何使用每個爲這個?
object.each(function(index, value)) {
console.log(value);
}
不工作。
我有對象在JavaScript:
var object = someobject;
Object { aaa=true, bbb=true, ccc=true }
如何使用每個爲這個?
object.each(function(index, value)) {
console.log(value);
}
不工作。
javascript對象沒有標準的.each功能。 jQuery提供了一個函數。見http://api.jquery.com/jQuery.each/下面應該工作
$.each(object, function(index, value) {
console.log(value);
});
另一種選擇是使用香草的Javascript使用Object.keys()
和數組這樣
Object.keys(object).map(function(objectKey, index) {
var value = object[objectKey];
console.log(value);
});
.map()
功能見https://developer.mozilla.org/nl/docs/Web/JavaScript/Reference/Global_Objects/Object/keys和https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
這些通常是更好比使用一個vanilla Javascript for-loop,除非你真的理解使用正常for循環的含義並且看它的具體用途像循環過財產鏈一樣的特徵。
但是通常,for-loop的效果並不比jQuery
或Object.keys().map()
好。我將在下面使用普通的for-loop來解決兩個潛在的問題。
權,因此也在其他的答案中指出,一個普通的JavaScript替代辦法是
for(var index in object) {
var attr = object[index];
}
沒有與此兩個潛在的問題:
1。你想檢查你發現的屬性是否來自對象本身,而不是來自原型鏈。這可以通過hasOwnProperty
功能進行檢查,像這樣
for(var index in object) {
if (object.hasOwnProperty(index)) {
var attr = object[index];
}
}
jQuery.each
和Object.keys
函數會自動處理它。
2。簡單for循環的另一個潛在問題是範圍和非閉包。這有點複雜,但以下面的代碼爲例。我們有一堆與IDS BUTTON0,按鈕1,按鈕2等按鈕,我們要對其設置一個onclick,做一個console.log
這樣的:
<button id='button0'>click</button>
<button id='button1'>click</button>
<button id='button2'>click</button>
var messagesByButtonId = {"button0" : "clicked first!", "button1" : "clicked middle!", "button2" : "clicked last!"];
for(var buttonId in messagesByButtonId) {
if (messagesByButtonId.hasOwnProperty(buttonId)) {
$('#'+buttonId).click(function() {
var message = messagesByButtonId[buttonId];
console.log(message);
});
}
}
如果,一段時間後,我們點擊任何按鈕我們將永遠得到「最後點擊!」在控制檯中,並且從不「先點擊!」或「點擊中間!」。爲什麼?因爲在執行onclick函數時,它會在時刻使用buttonId
變量顯示messagesByButtonId[buttonId]
。並且由於該循環在那一刻完成,所以buttonId
變量仍然是「button2」(它在上次循環迭代期間的值),因此messagesByButtonId[buttonId]
將是messagesByButtonId["button2"]
,即「最後點擊!」。
有關閉包的更多信息,請參閱https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures。尤其是該頁面涵蓋我們示例的最後一部分。
再次,jQuery.each
和Object.keys().map()
自動解決這個問題對我們來說,因爲它爲我們提供了function(index, value)
(具有封閉),所以我們是安全的,同時使用索引和值和放心,他們有我們所期望的價值。
for(var key in object) {
console.log(object[key]);
}
謝謝,但這個回報我」真實「,而不是aaa,bbb,ccc :( – 2012-08-07 13:19:47
是啊多數民衆贊成在什麼它的priting安慰屬性的價值是真實的每個鍵,如果你想看到aaa,bbb,ccc然後使用'console.log(key);' – 2012-08-07 17:34:55
請注意,您可能想要檢查找到的密鑰是來自對象本身,還是來自原型鏈。使用object.hasOwnProperty(key)檢查 – 2013-10-03 11:26:32
var object = { "a": 1, "b": 2};
$.each(object, function(key, value){
console.log(key + ": " + object[key]);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
//output
a: 1
b: 2
這是錯誤的! $ .each是JQuery-Framework! – raiserle 2014-04-14 11:44:55
這取決於jquery。有沒有jQuery解決方案? – 2014-07-29 21:17:29
你應該添加一些標題給你的答案,說明它是jQuery依賴的 – davidtaubmann 2017-04-07 14:40:26
http://stackoverflow.com/questions/921789/how-to-loop-through-javascript-object-literal-with-objects-as-成員 – 2012-08-07 12:55:39
你使用jQuery嗎?你期望什麼結果?控制檯中有三個「真」嗎? – davids 2012-08-07 12:56:24
jQuery的$ .each文檔(http://api.jquery.com/jQuery.each/)有一個完美的例子 - 請參閱頁面上的第二個代碼塊。使用alert()而不是console.log()。 – Faust 2012-08-07 13:00:24