转换/展平对象数组

时间:2011-12-15 03:20:54

标签: javascript

我有以下需要转换为一个对象的对象数组。 是否有捷径可寻? 我在页面上有下划线。也许它可以提供帮助。

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

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

我想我可以对数组进行递归并制作最终对象,但我希望有更简单/更好的方法。 任何指针都赞赏,因为我是一个javascript noob。

4 个答案:

答案 0 :(得分: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/

答案 1 :(得分: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/

答案 2 :(得分: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];
    }
}

答案 3 :(得分: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];  
    }
}