我正在开发一个数据处理程序,我快完成了。我已经有了重复检测算法,并且有一个包括重复项在内的所有项目的列表以及一个重复项列表。
我要浏览项目列表,按重复项列表过滤,并删除除第一个重复项以外的所有重复项。我已经尝试过了,但是实际上并没有从数组中删除记录。
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;
}
请记住,list
和dupes
的架构略有不同。 list
只是对象数组,其ID字段称为externalID
,dupes
是具有以下模式的对象数组:
[{
item1: {schema from list},
item2: {schema from list},
...}]
它们不是精确的重复项,更像是来自具有不同模式的不同数据库的重复项,这些重复模式已重新格式化为同一模式。...
答案 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
让我知道这是否对您有用