2009-02-25 73 views
89

有沒有辦法使用Prototype JavaScript框架來遍歷對象的每個屬性?使用Prototype在JavaScript中遍歷對象的每個屬性?

這裏的情況:我得到的JSON的Ajax響應,看起來是這樣的:

{foo: 1, bar: 2, barobj: {75: true, 76: false, 85: true}} 

如果我評估一個變量response是JSON響應,我希望能夠遍歷每個查看response.barobj對象中的屬性,查看哪些索引是真的,哪些是假的。

原型既有Object.keys()也有Object.values(),但奇怪的是似乎沒有簡單的Object.each()函數!我可以把Object.keys()和Object.values()的結果交叉引用,但是這是一種破解,我確信有一個正確的方法來做到這一點!

回答

42

你必須首先convert your object literal to a Prototype Hash

// Store your object literal 
var obj = {foo: 1, bar: 2, barobj: {75: true, 76: false, 85: true}} 

// Iterate like so. The $H() construct creates a prototype-extended Hash. 
$H(obj).each(function(pair){ 
    alert(pair.key); 
    alert(pair.value); 
}); 
0

您應該迭代鍵並使用方括號來獲取值。

請參見:How do I enumerate the properties of a javascript object?

編輯:顯然,這使得問題的重複。

+0

這種方法是強烈反對反對原型文檔: http://www.prototypejs.org/api/array – OverloadUT 2009-02-25 21:38:05

+1

此外,我不認爲這是重複的,因爲我正在尋找原型 - 原生解決方案,這是我得到的。對於不希望使用框架的人來說,另一個問題是體面的,但如果您使用Prototype,則此解決方案更安全。 – OverloadUT 2009-02-25 21:42:23

+1

@OverloadUT:你沒有仔細閱讀:不鼓勵遍歷數組的屬性,而不是簡單的對象 – Christoph 2009-02-25 22:54:13

546

沒有必要爲原型的位置:JavaScript有for..in循環。如果你不知道,沒有人有Object.prototype搞砸,檢查hasOwnProperty()爲好,即

for(var prop in obj) { 
    if(obj.hasOwnProperty(prop)) 
     doSomethingWith(obj[prop]); 
}