javascript - 合并包含数组的对象数组
问题描述
你好我想知道如何实现这种方法:我有这个对象数组:
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 循环来完成,但我正在寻找更简单的方法。
解决方案
这是一个解决方案,其中:
- 不会覆盖/更改原始数组
- 功能齐全
解释:
- 用于
array.reduce(..)
将列表减少到只有两个唯一条目(区 1 和 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);
推荐阅读
- python - 错误:无法将关键字“id”解析为字段
- list - Flutter:所选值不显示在下拉列表中
- c# - 在 VS Code 中使用 .Net 4.8 框架
- javascript - 我想在其他文本字段值中添加 html 文本字段值将更改
- powershell - Powershell脚本在重新启动后从它离开的地方开始
- laravel - 为什么在 Firefox 自动重定向 http://...local 到 https://...local/dashboard/
- android - Constraintlayout(in RelativeLayout) layout_alignParentBottom 从底部切割(在应用程序的默认模式下)
- java - 来自长时间运行的 Java 服务器的 JDWP 内存不足错误
- node.js - AWS Lambda 上传到 S3 超时
- javascript - 未使用“createNavigationContainer”时出现“createNavigationContainer()”错误