Javascript 基于键值组合数组中的对象
我有一个带有公用键的对象数组。我想根据键值组合数组中的所有对象 我的阵列:Javascript 基于键值组合数组中的对象,javascript,arrays,lodash,javascript-objects,Javascript,Arrays,Lodash,Javascript Objects,我有一个带有公用键的对象数组。我想根据键值组合数组中的所有对象 我的阵列: let array = [ { "day": "Monday", "item1": "abc" }, { "day": "Tuesday", "item1": "def" }, { "day": "Monday", "item2": "123" }, { "day": "Tuesday", "item2": "456" } ]
let array = [
{
"day": "Monday",
"item1": "abc"
},
{
"day": "Tuesday",
"item1": "def"
},
{
"day": "Monday",
"item2": "123"
},
{
"day": "Tuesday",
"item2": "456"
}
]
基于该示例,我希望根据公共日键值组合数组中的对象,并合并其他键值对(其余的键是动态的)
预期产出:
[
{
"day": "Monday",
"item1": "abc",
"item2": "123"
},
{
"day": "Tuesday",
"item1": "def",
"item2": "456"
}
]
我尝试过使用Lodash
和plainES6
,但仍然无法找到解决方案。找到了解决方案
_(array).groupBy('day').map(_.spread(_.assign)).value()
您可以使用lodash reduce函数,如下所示:
let array = [
{
"day": "Monday",
"item1": "abc"
},
{
"day": "Tuesday",
"item1": "def"
},
{
"day": "Monday",
"item2": "123"
},
{
"day": "Tuesday",
"item2": "456"
}
]
let merged = _.reduce(array, function(result, value, key) {
let item = result.find(item => item.day === value.day);
if (!item) {
result.push(value)
} else {
_.merge(item, value);
}
return result;
} , []);
尝试使用数组#reduce
,扩展运算符
,并使用ES6进行处理
const arr=[{“day”:“星期一”,“item1”:“abc”},{“day”:“星期二”,“item1”:“def”},{“day”:“星期一”,“item2”:“123”},{“day”:“星期二”,“item2”:“456”};
设res=arr.reduce((acc,{day,{rem})=>(acc[day]=acc[day]?{acc[day],…rem}:{day,{rem},acc),{});
console.log(Object.values(res))