javascript - 从对象数组中的嵌套数组中删除重复项
问题描述
我有这个对象数组:
const arrayOfObjects = [{
id: 10,
children: [1000]
},
{
id: 10,
children: [2000]
},
{
id: 20,
children: [1000]
},
{
id: 20,
children: [1000, 2000]
},
{
id: 20,
children: [2000]
},
];
我想使用以下代码删除重复项:
const arrayHashMap = arrayOfObjects.reduce((obj, item) => {
if (obj[item.id]) {
// obj[item.id].children.push(...item.children);
const temporaryArray = [...obj[item.id].children, ...item.children];
obj[item.id].children = [...new Set(temporaryArray)];
} else {
obj[item.id] = {
...item
};
}
return obj;
}, {});
const result = Object.values(arrayHashMap);
在这段代码中,我注释了将值推送到数组的部分。我尝试使用“new Set”从最终数组中删除重复项,但我总是将值分配给“obj[item.id].children”。这可以吗还是有更好的方法来写这个?
预期结果:
[{
id: 10,
children: [1000, 2000]
}, {
id: 20,
children: [1000, 2000]
}]
谢谢
解决方案
如果值不存在,您可以分组id
并检查数组,然后推送该值。
const
data = [{ id: 10, children: [1000] }, { id: 10, children: [2000] }, { id: 20, children: [1000] }, { id: 20, children: [1000, 2000] }, { id: 20, children: [2000] }],
result = Object.values(data.reduce((r, { id, children }) => {
r[id] ??= { id, children: [] };
children.forEach(v => {
if (!r[id].children.includes(v)) r[id].children.push(v);
})
return r;
}, {}));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- javascript - 使用 Google Earth Engine 将 Landsat Image Collection 缩减为长格式列表时缺少 NDVI 值
- android - SQL Cipher android studio中的“没有这样的表”
- scala - 尝试运行 Play 时出现安全异常
- java - 如何使用 Undertow 启用跨域源
- node.js - 成功验证电子邮件的操作
- ruby-on-rails - 如何在设置 Ruby on Rails 时安装 SQLite3?
- android - Firebase currentUser 从 Firebase DB 注销和删除用户有什么区别?
- eclipse - Javafx:无法将自定义控件导入 Scene Builder
- c++ - `Array[i]` 与 `Array+i`
- apache-pig - 无法从外部连接中找到记录