Javascript 将对象数组转换为单个对象
我试图将一个对象数组合并成一个对象,该对象合并了所有相似属性的值Javascript 将对象数组转换为单个对象,javascript,arrays,array.prototype.map,Javascript,Arrays,Array.prototype.map,我试图将一个对象数组合并成一个对象,该对象合并了所有相似属性的值 objArray=[{ foo:[“f”,“b”], 酒吧:[“e”] }, { foo:[“a”,“c”], 酒吧:[“a”,“c”] }, { foo:[“f”,“b”], 条形图:[“z”] }]; 常数newObj={ foo:[], 酒吧:[] }; objArray.forEach((obj)=>{ newObj.foo.push(…obj.foo); 新obj.bar.push(…obj.bar); }); con
objArray=[{
foo:[“f”,“b”],
酒吧:[“e”]
}, {
foo:[“a”,“c”],
酒吧:[“a”,“c”]
}, {
foo:[“f”,“b”],
条形图:[“z”]
}];
常数newObj={
foo:[],
酒吧:[]
};
objArray.forEach((obj)=>{
newObj.foo.push(…obj.foo);
新obj.bar.push(…obj.bar);
});
console.log(newObj)
可以使用对象#entries()
的嵌套reduce()来迭代属性,而无需在任何地方硬编码特定的属性名称
objArray=[{
foo:[“f”,“b”],
酒吧:[“e”]
}, {
foo:[“a”,“c”],
酒吧:[“a”,“c”]
}, {
foo:[“f”,“b”],
条形图:[“z”]
}];
常数res=objArray.reduce((acc,c)=>{
返回Object.entries(c).reduce((a[k,v])=>{
a[k]=(a[k]| |[])。concat(v)
归还
},acc)
},{})
log(res)
可以使用对象#条目()的嵌套reduce()来迭代属性,而无需在任何地方硬编码特定的属性名称
objArray=[{
foo:[“f”,“b”],
酒吧:[“e”]
}, {
foo:[“a”,“c”],
酒吧:[“a”,“c”]
}, {
foo:[“f”,“b”],
条形图:[“z”]
}];
常数res=objArray.reduce((acc,c)=>{
返回Object.entries(c).reduce((a[k,v])=>{
a[k]=(a[k]| |[])。concat(v)
归还
},acc)
},{})
console.log(res)
您可以为任意数量的键和值获取对象的条目
var data=[{foo:[“f”,“b”],bar:[“e”]},{foo:[“a”,“c”],bar:[“a”,“c”]},{foo:[“f”,“b”],bar:[“z”]},
合并=数据。减少((r,o)=>
Object.entries(o).reduce((s[k,v])=>
赋值(s,{[k]:(s[k]| |[]).concat(v)},r),{});
console.log(合并)代码>
.as console wrapper{max height:100%!important;top:0;}
您可以获取对象的条目以获得任意数量的键和值
var data=[{foo:[“f”,“b”],bar:[“e”]},{foo:[“a”,“c”],bar:[“a”,“c”]},{foo:[“f”,“b”],bar:[“z”]},
合并=数据。减少((r,o)=>
Object.entries(o).reduce((s[k,v])=>
赋值(s,{[k]:(s[k]| |[]).concat(v)},r),{});
console.log(合并)代码>
。作为控制台包装{max height:100%!important;top:0;}
要获得预期的结果,请使用Object.keys和使用forEach的两个循环
forEach的第一个循环将处理每个对象
使用Object.keys的第二个循环将处理每个对象键,并使用键推送到新数组
使用Object.hasOwnProperty将newObj中的值设置为具有原始数组对象属性的键
objArray=[
{
foo:[“f”,“b”],
酒吧:[“e”],
动物园:[“z”]
},
{
foo:[“a”,“c”],
酒吧:[“a”,“c”]
},
{
foo:[“f”,“b”],
条形图:[“z”]
}
];
常数newObj={
foo:[],
酒吧:[]
};
objArray.forEach(obj=>{
Object.keys(obj.forEach)(v=>{
if(新对象拥有自己的财产(v)){
newObj[v].push(obj[v]);
}
});
});
console.log(newObj)代码>要获得预期结果,请使用Object.keys和使用forEach的两个循环
forEach的第一个循环将处理每个对象
使用Object.keys的第二个循环将处理每个对象键,并使用键推送到新数组
使用Object.hasOwnProperty将newObj中的值设置为具有原始数组对象属性的键
objArray=[
{
foo:[“f”,“b”],
酒吧:[“e”],
动物园:[“z”]
},
{
foo:[“a”,“c”],
酒吧:[“a”,“c”]
},
{
foo:[“f”,“b”],
条形图:[“z”]
}
];
常数newObj={
foo:[],
酒吧:[]
};
objArray.forEach(obj=>{
Object.keys(obj.forEach)(v=>{
if(新对象拥有自己的财产(v)){
newObj[v].push(obj[v]);
}
});
});
console.log(newObj)代码>使用forEach作为您的代码,但用于内部
var objArray=[{foo:[“f”,“b”],bar:[“e”]},{foo:[“a”,“c”],bar:[“a”,“c”]},{foo:[“f”,“b”],bar:[“z”]};
var newObj={};
objArray.forEach(o=>{
对于(o中的p){
如果(!(新词中的p)){
newObj[p]=[];
}
newObj[p]=[…newObj[p],…o[p]];
}
});
console.log(newObj)代码>使用forEach作为您的代码,但用于内部
var objArray=[{foo:[“f”,“b”],bar:[“e”]},{foo:[“a”,“c”],bar:[“a”,“c”]},{foo:[“f”,“b”],bar:[“z”]};
var newObj={};
objArray.forEach(o=>{
对于(o中的p){
如果(!(新词中的p)){
newObj[p]=[];
}
newObj[p]=[…newObj[p],…o[p]];
}
});
console.log(newObj)
获取@charlietfl答案并为IE编辑它(使用Object.keys
而不是Object.entries
)
objArray=[{
foo:[“f”,“b”],
酒吧:[“e”]
}, {
foo:[“a”,“c”],
酒吧:[“a”,“c”]
}, {
foo:[“f”,“b”],
条形图:[“z”]
}];
常数res=objArray.reduce((acc,c)=>{
返回Object.keys(c).reduce((a,k)=>{
设v=c[k];
a[k]=(a[k]| |[])。concat(v);
返回a;
},acc);
}, {});
console.log(res)
获取@charlietfl答案并为IE编辑它(使用Object.keys
而不是Object.entries
)
objArray=[{
foo:[“f”,“b”],
酒吧:[“e”]
}, {
foo:[“a”,“c”],
酒吧:[“a”,“c”]
}, {
foo:[“f”,“b”],
条形图:[“z”]
}];
常数res=objArray.reduce((acc,c)=>{
返回Object.keys(c).reduce((a,k)=>{
设v=c[k];
a[k]=(a[k]| |[])。concat(v);
返回a;
},acc);
}, {});
console.log(res)
可能重复的Not dupe@nisarg可能重复的Not dupe@nisarg如果数组中有一个对象看起来像{foo:[“f”,“b”],bar:[“z”],zoo:[“123”]}
@ibrahimmahrir,用Object.hasownproperty检查更新了我的答案如果数组中有一个对象看起来像{foo:[“f”,“b”]、bar:[“z”]、zoo:[“123”]}
@ibrahimmahrir,用Object.hasownproperty检查更新了我的答案谢谢。我意识到我可以