首页 > 解决方案 > 根据条件合并数组

问题描述

好的,我有一个如下所示的数组

[
  {data: Array(22), title: '1111'}
  {data: Array(12), title: '2222'}
  {data: Array(6), title: '1111'}
  {data: Array(22), title: '3333'}
  {data: Array(0), title: '4444'}
]

如果存在具有重复标题的对象(例如{data: Array(22), title: '1111'}{data: Array(6), title: '1111'}),我想执行此操作,我想合并data具有相同标题的对象数组。

所以我的最终输出应该是

[
  {data: Array(28), title: '1111'}
  {data: Array(12), title: '2222'}
  {data: Array(22), title: '3333'}
  {data: Array(0), title: '4444'}
]

我也尝试了一些 lodash 函数以及 javascript 过滤器。我尝试了 forEach ,映射等。但无法掌握做我需要的方法。

标签: javascriptarraysreactjs

解决方案


您可以使用Array#reduce.

let arr = [
  {data: [1,2,3], title: '1111'},
  {data: [4,5], title: '2222'},
  {data: [6], title: '1111'},
  {data: [7,8,9,10], title: '3333'},
  {data: [11,12,13,14,15], title: '4444'}
]
let res = Object.values(arr.reduce((acc, {title, data})=>{
    (acc[title] ??= {title, data: []}).data.push(...data);
    return acc;
}, {}));
console.log(res);


推荐阅读