javascript - 如何在javascript中合并合并或展平多维数组
问题描述
我有一个数组,它是具有相应预订的会议室。会议室是重复的,但相应的预订会有所不同,我想要没有重复的会议室并合并每个会议室的所有预订。
This is what I have:
['conference room one', ['reservation 2', 'reservation 1', 'reservation 3']]
['conference room two', ['reservation 7', 'reservation 5', 'reservation 6']]
['conference room two', ['reservation 10', 'reservation 11', 'reservation 12']]
['conference room one', ['reservation 9', 'reservation 8', 'reservation 15']]
['conference room one', ['reservation 17', 'reservation 14', 'reservation 13']]
This is what I want:
['conference room one', ['reservation 2', 'reservation 1', 'reservation 3', 'reservation 9', 'reservation 8', 'reservation 15', 'reservation 17', 'reservation 14', 'reservation 13']]
['conference room two', ['reservation 7', 'reservation 5', 'reservation 6', 'reservation 10', 'reservation 11', 'reservation 12']]
(删除了此处的屏幕截图,因为它无关紧要且分散注意力)
解决方案
另一种方法是使用函数reduce
对会议及其预订进行分组,并使用函数Object.values
提取分组值。
let array = [['conference room one', ['reservation 2', 'reservation 1', 'reservation 3']],['conference room two', ['reservation 7', 'reservation 5', 'reservation 6']],['conference room two', ['reservation 10', 'reservation 11', 'reservation 12']],['conference room one', ['reservation 9', 'reservation 8', 'reservation 15']],['conference room one', ['reservation 17', 'reservation 14', 'reservation 13']]],
result = Object.values(array.reduce((a, [conference, reservations]) => {
(a[conference] || (a[conference] = [conference, []]))[1].push(...reservations);
return a;
}, {}));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- zk - 如何引用具有动态 id 的 zul 组件,例如 id="calendarDecorate_${vmStatus.index}"?
- sql - 错误的 SQL 聚合结果
- typescript - RxJS6:为什么 observable Pipe 运算符只接收 OperatorFunction 而不是 MonoTypeOperatorFunction
- python - AttributeError:模块“asyncio.coroutines”没有属性“debug_wrapper”
- php - 解决 php laravel 中的索引问题
- sql - 在 oracle 11g 中加入三个表
- html - 在移动设备中,隐藏输入并避免它被提交
- python - python beautifulsoup网页抓取问题
- angular - 浏览器缓存的 Angular 应用程序文件
- java - ArrayList 每次我回到片段时,他的大小都会加倍