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
和plain
ES6
,但仍然无法找到解决方案。

找到了解决方案

_(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))