2009-12-23 60 views
0

我認爲JavaScript沒有像 obj.first什麼,但我在想,如果這樣的事情可以以任何方式來實現:是否有可能在JavaScript中功能性地遍歷對象?

var foobar = { aint: "foo", an: "bar", array: "foobar" }; 
var recursiveObjDump = function (obj, idx) { 
    if (idx == obj.last.index) return obj[idx]; 
    else return obj[idx] + " " + recursiveObjDump(obj, obj[idx].next.index); 
}; 

alert(recursiveObjDump(foobar, foobar.first.index)); 

感謝。

+1

你只是想檢查調試對象?如果是這樣,只需使用Firebug。 – 2009-12-23 18:40:20

回答

1

您可以使用for in來遍歷所有屬性。

這是一個基本的,你可以添加更好的檢測來尋找數組等等。

var foobar = { aint: "foo", an: "bar", array: "foobar" }; 

function recusiveDump(obj) { 
    var output = ''; 
    for(var i in obj) { 
     if(obj.hasOwnProperty(i)) { 
      if(typeof obj[i] == 'object') { 
       output += recusiveDump(obj[i]); 
      } else { 
       output += obj[i]; 
      } 
     } 
    } 
    return output; 
} 

alert(recusiveDump(foobar)); 
+6

函數'recursiveDump'自己​​調用;因此它是遞歸的。 – 2009-12-23 18:35:01

2

不是。 Javascript中的對象是關聯數組 - 鍵/值對的集合。沒有指定的訂單,就像在mathematical set(與sequence相比)。因此,尋找像object.first這樣的東西沒有意義。

另一方面,你可以絕對強加自己的結構。例如,你可以在Javascript中實現Lisp風格的列表,並重復這些列表。關於在Javascript中使用函數式編程技術的問題。最後,Javascript是面向對象的,而不是功能性的,所以你只是不會去找到那些原生實現的功能原語。

編輯:如果你仍然想在Javascript中使用函數式編程技術,看看Functional Javascript

1

如果您只想序列化一個對象,請使用JSON.stringify()。它是原生的Javascript 5,您可以從Crockford的網站下載腳本以獲得更低的JavaScript版本。 (相同的腳本可以再次重新分析JSON對象序列化安全返回JavaScript對象)