javascript - 如何使用嵌套对象从数组中删除重复项
问题描述
我有一个数组,其中包含区域和位置。位置是数组中的另一个对象。例如:
let arr= [{"regionId":1,"regionName:"xyz","location":{"locationId":1,"locationName":"abc"}}]
在上面的示例中,区域可以有多个条目,但对于特定区域,只能有不同的位置。
例子:
let arr= [{"regionId":1,"regionName:"xyz","location":{"locationId":1,"locationName":"abc"}},
{"regionId":1,"regionName:"xyz","location":{"locationId":1,"locationName":"def"}},
{"regionId":1,"regionName:"xyz","location":{"locationId":1,"locationName":"ghi"}}]
但不能与同一地区有相同的位置。
let arr= [{"regionId":1,"regionName:"xyz","location":{"locationId":1,"locationName":"abc"}},
{"regionId":1,"regionName:"xyz","location":{"locationId":1,"locationName":"abc"}}
]
那么如何避免上述情况。如何从数组中删除这些条目。顺便说一下,下面的情况是可以接受的。
let arr= [{"regionId":1,"regionName:"xyz","location":{"locationId":1,"locationName":"abc"}},
{"regionId":2,"regionName:"mno","location":{"locationId":1,"locationName":"abc"}}
]
解决方案
你可以使用 array.reduce.. 像这样的东西:
let arr= [
{regionId:1,regionName:"xyz",location:{locationId:1,locationName:"abc"}},
{regionId:1,regionName:"xyz",location:{locationId:1,locationName:"def"}},
{regionId:1,regionName:"xyz",location:{locationId:1,locationName:"ghi"}},
{regionId:1,regionName:"xyz",location:{locationId:1,locationName:"abc"}},
{regionId:1,regionName:"mno",location:{locationId:1,locationName:"abc"}}
];
const reducedArr = arr.reduce((acc, cur) => {
if(acc.length === 0) {
acc.push(cur);
}
if(acc.findIndex((el) => el.regionName === cur.regionName && el.location.locationName === cur.location.locationName) > -1) {
return acc;
}
acc.push(cur);
return acc;
}, []);
console.log(reducedArr);
推荐阅读
- gekko - 用目标函数表示的整数约束优化以执行另一个程序调用
- selenium - 如何从硒中的领事中删除错误
- excel - 保存电子表格 VBA 的非公式化版本
- java - Selenium 仅选择 WebElement 的直接子级
- agora.io - 使用 agora 有哪些软硬件要求?
- powershell - 如果获取的文件内容超过 2 行,则发送电子邮件
- simulator - 如何向 RISCV 交叉编译器添加自定义指令?
- reactjs - 使用 React Hooks 的生命周期问题
- javascript - 如何在 JavaScript 中删除 JSON 数据的第一个和最后一个双引号和反斜杠
- sorting - 对数组进行快速排序