从基于另一个数组的数组中删除项目

时间:2018-07-17 17:33:30

标签: javascript node.js

我正在开发一个数据处理程序,我快完成了。我已经有了重复检测算法,并且有一个包括重复项在内的所有项目的列表以及一个重复项列表。

我要浏览项目列表,按重复项列表过滤,并删除除第一个重复项以外的所有重复项。我已经尝试过了,但是实际上并没有从数组中删除记录。

const removeDupes = (list, dupes) => {
  list.forEach(listItem => {
    let filtered = dupes.filter(x => ((x.item1.externalId === listItem.externalId)|| (x.item2.externalId === listItem.externalId)));
    if(filtered.length > 0){
      for(let i = 1; i < filtered.length; i++){
        list.splice(list.indexOf(filtered[i]));
      }
    }
  });
  return list;
}

请记住,listdupes的架构略有不同。 list只是对象数组,其ID字段称为externalIDdupes是具有以下模式的对象数组:

[{
    item1: {schema from list},
    item2: {schema from list},
...}]

它们不是精确的重复项,更像是来自具有不同模式的不同数据库的重复项,这些重复模式已重新格式化为同一模式。...

1 个答案:

答案 0 :(得分:1)

我会做这样的事情:

const noDuplicates = [...(new Set(duplicates))]; // This creates an array that removes duplicated items in it

然后将其与原始列表进行比较:

const removeDupes = list.filter(value => !noDuplicates.includes(value)); // This will add the value if it is not in the list

让我知道这是否对您有用