2011-12-15 52 views
3

我有以下我需要轉換爲一個對象的對象數組。 有沒有簡單的方法來做到這一點? 我在頁面上有下劃線。也許它可以幫助。轉換/拼合對象數組

[{John:{name:"John", age : 59}},{Dave:{name:"Dave", age:62}}] 

{John:{name:"John", age : 59}, Dave:{name:"Dave", age:62}} 

我想我可以遞歸陣列上,並做出最終的目標,但我希望有一個更簡單/更好的辦法。 任何指針讚賞,因爲我是一個JavaScript的noob。

回答

3
var arr = [{John:{name:"John", age : 59}},{Dave:{name:"Dave", age:62}}]; 

var obj = {}; 

for(var i = 0; i < arr.length; i++){ 
    for(x in arr[i]){ 
     obj[x] = arr[i][x]; 
    } 
} 

http://jsfiddle.net/jp4wG/

+0

感謝,將盡快它讓我接受這一點。非常感謝幫助。 – Chin

+0

陣列深度未知時,我們該如何做到這一點?例如。 '[John:{children:[{Dave:{children:[{Maggie:children ....' –

1

這應該做的伎倆:

var names = [{John:{name:"John", age : 59}},{Dave:{name:"Dave", age:62}}]; 
var flattened = {}; 

for (var i = 0; i < names.length; i++) { 
    for (var entry in names[i]) { 
     flattened[entry] = names[i][entry]; 
    } 
} 
1

大多數JavaScript框架(MooTools的,JQuery的,可能是下劃線)將帶着一些功能,從而使它更容易些。如果你正在展平的對象是自定義類,那麼你必須注意在for in循環中彈出的添加的方法定義。

var nested = [{John:{name:"John", age : 59}},{Dave:{name:"Dave", age:62}}], flattened = {}; 

for(var i = 0; i < nested.length; i++) { 
    for(key in nested[i]) { 
     flattened[key] = nested[i][key]; 
    } 
} 
9

既然你提到你有Underscore.js可用,你真正需要的是使用extend功能:

var arr = [{John:{name:"John", age : 59}},{Dave:{name:"Dave", age:62}}]; 

var flattened = _.extend.apply(_, arr); 

http://jsfiddle.net/Yjmbk/

+0

多數民衆贊成在多好 - 謝謝 – Chin

+1

我只是去「哦!」當我真的有效時輝煌但奇怪的解決方案+1 –