【问题标题】:How to compare two arrays of objects and remove duplicates in JavaScript?如何比较两个对象数组并删除 JavaScript 中的重复项?
【发布时间】:2020-05-08 15:56:36
【问题描述】:

在下面的代码中,当从checklist 数组中删除一个对象时,它会删除最后两个,但是如果我更改对象顺序并将最后两个对象移动到前两个位置,那么它工作正常。为什么?有没有更好的解决方案从对象数组中删除重复项?

const checklist = [
  { id: 1, value: "Elenor Anderson", isSelected: false },
  { id: 2, value: "Caden Kunze", isSelected: false },
  { id: 110, value: "Ms. Hortense Zulauf", isSelected: false },
  { id: 112, value: "Grady Reichert", isSelected: false }
];

const mainlist = [
  { id: 36, value: "Ms. Hortense Zulauf", isSelected: false },
  { id: 46, value: "Grady Reichert", isSelected: false },
  { id: 1, value: "Elenor Anderson", isSelected: false },
  { id: 2, value: "Caden Kunze", isSelected: false }
];

checklist.forEach(item => {
  var ItemIndex = mainlist.findIndex(b => b.id === item.id);
  console.log(ItemIndex);
  checklist.splice(ItemIndex, 1);
});

console.log(this.checklist);

【问题讨论】:

    标签: javascript arrays duplicates compare


    【解决方案1】:

    您可以使用Array.prototype.filter

    const checklist = [ {id:1,value:'Elenor Anderson',isSelected:false}, {id:2,value:'Caden Kunze',isSelected:false}, {id:110,value:'Ms. Hortense Zulauf',isSelected:false}, {id:112,value:'Grady Reichert',isSelected:false}, ];
    const mainlist = [ {id:36,value:'Ms. Hortense Zulauf',isSelected:false}, {id:46,value:'Grady Reichert',isSelected:false}, {id:1,value:'Elenor Anderson',isSelected:false}, {id:2,value:'Caden Kunze',isSelected:false} ];
    const ids = mainlist.map(e => e.id);
    let filtered = checklist.filter(e => ids.includes(e.id));
    console.log(filtered)

    或者可以为 O(n) 复杂度创建一个Set

    const ids =new Set(mainlist.map(e => e.id));
    let filtered = checklist.filter(e => ids.has(e.id));
    

    【讨论】:

      猜你喜欢
      • 2021-05-09
      • 2013-02-02
      • 2020-10-16
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 2017-06-01
      相关资源
      最近更新 更多