首页 > 解决方案 > 从数组中删除重复的对象

问题描述

我一直在努力删除数组中的重复对象。我在尝试读取 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)

标签: javascriptarrays

解决方案


您可以使用该set对象删除重复的 ID,然后使用mapfind函数来改变结果,以便只为您提供每个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);


推荐阅读