javascript - 根据条件合并数组
问题描述
好的,我有一个如下所示的数组
[
{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 ,映射等。但无法掌握做我需要的方法。
解决方案
您可以使用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);
推荐阅读
- javascript - 模板JS | 将宿主样式应用于组件
- apache-kafka - Apache flink-kafka 在单个 flink-kafka 消费者组中添加多个消费者
- html - 如何在 VBA 中使用 .querySelectorAll 避免来自 HTML 的重复信息?
- python - 将分而治之的递归算法转换为迭代版本
- spring-integration - Spring Integration WS 出站网关 SSL
- django - 制作用户更新视图时遇到问题
- java - 如何返回异常消息以在 Java 中调用 api?
- javascript - 更改 jsf h:selectOneMenu 的下拉箭头
- vue.js - Ag-Grid sass/webpack 似乎无法从 node_modules 内部解析相对路径
- sql - 无法解释查询 SQL 的 BASIC 文件