javascript - 从数组中删除重复的对象
问题描述
我一直在努力删除数组中的重复对象。我在尝试读取 filterList[i+1].tagID 时不断收到错误消息。我可以手动输入 [i+1] 值并获得正确的结果。我不确定为什么 i+1 是一个问题。我还想知道使用 slice[i, 1] 是否比删除更好。
const filterList = [{
tagID: 1,
tagName: "Red"
}, {
tagID: 1,
tagName: "Red"
}, {
tagID: 2,
tagName: "Orange"
}, {
tagID: 2,
tagName: "Orange"
}, {
tagID: 5,
tagName: "Blue"
}, {
tagID: 5,
tagName: "Blue"
}, {
tagID: 5,
tagName: "Blue"
}, {
tagID: 6,
tagName: "Indigo"
}, {
tagID: 6,
tagName: "Indigo"
}, {
tagID: 7,
tagName: "Violet"
}, {
tagID: 7,
tagName: "Violet"
}, {
tagID: 7,
tagName: "Violet"
}]
filterList.sort(function(a, b) {
return a.tagID - b.tagID;
});
for (let i = 0; i < filterList.length; i++) {
if (filterList[i].tagId == filterList[i+1].tagID) {
delete filterList[i];
}
}
console.log(filterList)
解决方案
您可以使用该set
对象删除重复的 ID,然后使用map
和find
函数来改变结果,以便只为您提供每个tagID
.
Array.from(new Set(filterList.map(_=> _.tagID)))
.map(ID=> filterList.find(o=> o.tagID === ID)));
const filterList = [{
tagID: 1,
tagName: "Red"
}, {
tagID: 1,
tagName: "Red"
}, {
tagID: 2,
tagName: "Orange"
}, {
tagID: 2,
tagName: "Orange"
}, {
tagID: 5,
tagName: "Blue"
}, {
tagID: 5,
tagName: "Blue"
}, {
tagID: 5,
tagName: "Blue"
}, {
tagID: 6,
tagName: "Indigo"
}, {
tagID: 6,
tagName: "Indigo"
}, {
tagID: 7,
tagName: "Violet"
}, {
tagID: 7,
tagName: "Violet"
}, {
tagID: 7,
tagName: "Violet"
}]
let result = Array.from(new Set(filterList.map(_ => _.tagID))).map((ID, index) => filterList.find(o => o.tagID == ID));
console.log(result);
推荐阅读
- android - 如何修复 dataSnapshot.getValue() 检索空值?
- javascript - 如何从频道 ID 获取 YouTube 视频 URL
- javascript - 使用 this.form.submit() 提交表单后无法获取表单元素的值;
- c++ - std::holds_alternative 可变参数模板
- google-maps - 地图的类型是什么,在哪里可以找到示例或教程
- python - 如何将列表小部件中的项目链接到qt设计器中表单中的单选按钮?
- react-native - 如何将购买选项移到右侧?
- asp.net-core - 运行“npm run webpack”我得到一个“TypeError:CleanWebpackPlugin 不是构造函数”
- php - 如何在 PHP 中将 ASCII 转换为 ISO-8859-1?
- gitlab - GITLAB Repo 克隆到 Google 可以存储