首页 > 解决方案 > 合并包含数组的对象数组

问题描述

你好我想知道如何实现这种方法:我有这个对象数组:

const array =[{district:1,buildings:["1","2"]},{district:1,buildings:["1","3"]},{district:2,buildings:["1","2"]}]

我想合并数组的对象+将对象的建筑物与同一区合并。

我应该得到什么:

const array =[{district:1,buildings:["1","2","3"]},{district:2,buildings:["1","2"]}]

任何帮助。谢谢

注意:这可以用 for 循环来完成,但我正在寻找更简单的方法。

标签: javascriptarrays

解决方案


这是一个解决方案,其中:

  • 不会覆盖/更改原始数组
  • 功能齐全

解释:

  1. 用于array.reduce(..)将列表减少到只有两个唯一条目(区 1 和 2),每个条目都有一个(可能)非唯一的建筑物列表。
  2. 用于Object.entries(..).map(..)能够迭代区域以使建筑物属性独一无二。

 const array = [
  { district: 1, buildings: [ '1', '2' ] },
  { district: 1, buildings: [ '1', '3' ] },
  { district: 2, buildings: [ '1', '2' ] }
];
 
 const result = Object.entries(
  array.reduce(
    (acc, {district, buildings}) => {
        acc[district] = acc[district] ? acc[district] : []; 
        acc[district].push(...buildings);
        return acc;
    }, 
    []
  )
).map(m => ({district: parseInt(m[0]), buildings: [...new Set(m[1])]}));

console.log(result);


推荐阅读