我有以下需要转换为一个对象的对象数组。 是否有捷径可寻? 我在页面上有下划线。也许它可以提供帮助。
[{John:{name:"John", age : 59}},{Dave:{name:"Dave", age:62}}]
到
{John:{name:"John", age : 59}, Dave:{name:"Dave", age:62}}
我想我可以对数组进行递归并制作最终对象,但我希望有更简单/更好的方法。 任何指针都赞赏,因为我是一个javascript noob。
答案 0 :(得分:9)
由于您提到Underscore.js可用,所以您真正需要的是使用extend
函数:
var arr = [{John:{name:"John", age : 59}},{Dave:{name:"Dave", age:62}}];
var flattened = _.extend.apply(_, arr);
答案 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];
}
}
答案 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];
}
}