我正在努力寻找一种方法将对象数组组合成一个对象。到目前为止,我遇到的所有解决方案的结果都是一个数组,但我需要一个对象。下面是一个例子:
[
{
'1112225544': '1',
'3258458756': '9',
'3654125412': '5',
},
{
'2229993827': '0',
'9827719902': '1',
'0000000000': '2',
'1112225544': '3',
},
...
]
数组中可以有多个对象。我想把它们弄平,得到这样的输出:
{
'3258458756': '9',
'3654125412': '5',
'2229993827': '0',
'9827719902': '1',
'0000000000': '2',
'1112225544': '3'
}
注意,重复的键会被最后一个数组的值覆盖。到目前为止,我看到的解决方案都是这样的,对我来说不太管用。
let data = [
{
'1112225544': '1',
'3258458756': '9',
'3654125412': '5',
},
{
'2229993827': '0',
'9827719902': '1',
'0000000000': '2',
'1112225544': '3',
},
];
let result = {};
data.forEach(x=>{
Object.entries(x).forEach(([k,v])=>result[k]=v)
})
console.log(result)
或
let data = [
{
'1112225544': '1',
'3258458756': '9',
'3654125412': '5',
},
{
'2229993827': '0',
'9827719902': '1',
'0000000000': '2',
'1112225544': '3',
},
];
let result = {};
data.forEach(x=>{
result = {...result, ...x}
})
console.log(result)
下面是使用Array.prototype.reduce的方法:
[
{
'1112225544': '1',
'3258458756': '9',
'3654125412': '5',
},
{
'2229993827': '0',
'9827719902': '1',
'0000000000': '2',
'1112225544': '3',
},
].reduce(
(acc, curr) => ({
...curr,
...acc,
}),
{}
);
每当我需要"减少"的时候当数组转换为标量或对象类型时,通常考虑reduce
。
这可以通过一个命令实现。使用Object.assign
并将数组扩展到。
Object.assign({}, ...[
{
'1112225544': '1',
'3258458756': '9',
'3654125412': '5',
},
{
'2229993827': '0',
'9827719902': '1',
'0000000000': '2',
'1112225544': '3',
},
])
这样吗?
const arr1 =
[ { '1112225544': '1'
, '3258458756': '9'
, '3654125412': '5'
}
, { '2229993827': '0'
, '9827719902': '1'
, '0000000000': '2'
, '1112225544': '3'
}
//...
]
const arr2 = arr1.reduce((r,c)=>
{
Object.entries(c).forEach(([k,v]) => r[k] = v )
return r
},{})
console.log( arr2 )
.as-console-wrapper { max-height: 100% !important; top: 0 }
或者老办法:
let items = [
{
'1112225544': '1',
'3258458756': '9',
'3654125412': '5',
},
{
'2229993827': '0',
'9827719902': '1',
'0000000000': '2',
'1112225544': '3',
},
];
let result = {};
for (let item of items)
result = Object.assign(result, item)
console.log(result)
let arr = [{1112225544:"1",3258458756:"9",3654125412:"5"},{2229993827:"0",9827719902:"1","0000000000":"2",1112225544:"3"}];
let result = Object.fromEntries(arr.flatMap(e => Object.entries(e)))
console.log(result)