我有一个数组,那就是有相应预订的会议室。会议室是重复的,但相应的预订将是不同的,我不希望重复的会议室,并合并每个会议室的所有预订。
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']]
(删除了这里的一张截图,因为它无关紧要,让人分心)
发布于 2018-07-15 05:11:40
您可以使用Array.reduce()
创建映射并对所有值进行分组,之后只需使用Object.values()
获取所有值的数组。
尝试以下操作:
var arr = [['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']]];
var result = Object.values(arr.reduce((a,curr)=>{
if(!a[curr[0]]){ // if the room is not present in map than add it.
a[curr[0]] = curr;
} else{ // if room exist than simply concat the reservations array of map and current element
a[curr[0]][1] = a[curr[0]][1].concat(curr[1]);
}
return a;
},{}));
console.log(result);
发布于 2018-07-15 05:08:16
另一种方法是使用函数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; }
https://stackoverflow.com/questions/51343354
复制相似问题