嗨,我有一个像下面的对象数组
[{
one:{
a:1,
b:2
},
two:{
x:3,
y:4
}
},
{
three:{
i:5,
j:8
}
}]
我想要输出如下
{one:[a,b],
two:[x,y],
three:[i,j]}
我尝试过使用Object.keys,map等等。我很迷惑。任何人都可以建议我获得这个的最好方法。
答案 0 :(得分:2)
我会使用reduce和extend
初始对象的值
function extend(target) {
Array.prototype.slice.call(arguments, 1).forEach(function(source) {
source && Object.getOwnPropertyNames(source).forEach(function(name) {
if (typeof source[name] === 'object' && target[name]) {
extend.call(target, target[name], source[name]);
} else {
target[name] = source[name];
}
});
});
return target;
}
var a = [{
one:{
a:1,
b:2
},
two:{
x:3,
y:4
}
},
{
three:{
i:5,
j:8
}
}];
var b = a.reduce(function (element, created) {
return extend(created, element);
}, {});
console.log(b); //{three:[i:5,j:8], one:[a:1,b:2], two:[x:3,y:4]}
答案 1 :(得分:1)
使用数组缩减功能查看下面的响应,将现有数组减少为对象
var temp = [{
one:{
a:1,
b:2
},
two:{
x:3,
y:4
}
},
{
three:{
i:5,
j:8
}
}].reduce(function(obj , val){
Object.keys(val).forEach(function(subkey){
obj[subkey] = [].concat(Object.keys(val[subkey]))
});return obj;
} , {});
console.log(temp)

答案 2 :(得分:0)
你我也尝试这种方法,其中source是输入:
source.map(function(item){
var keys = Object.keys(item);
return keys.reduce(function(p, c, index){
var subKeys = Object.keys(item[c]);
console.log(item[c]);
p[c] = subKeys.map(function(subKey){
var result = {};
result[subKey] = item[c][subKey];
return result;
});
return p;
}, {});
});