首页 > 解决方案 > 如何在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']]

(删除了此处的屏幕截图,因为它无关紧要且分散注意力)

标签: javascriptarrays

解决方案


另一种方法是使用函数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; }


推荐阅读