首页 > 解决方案 > 检查对象数组是否包含来自另一个对象数组的多个值并删除重复项

问题描述

list.data我有一个包含大约 2000个对象的对象数组。我有另一个数组docs,其中一个对象已经存在于list.data数组中。我想找到重复/重复并将它们从docs数组中删除。如果该对象在三个属性(名称、测验主、文件)中保存了相同的值,则该对象是重复的。否则它不是重复的。到目前为止,我已经尝试过这段代码:

const filtered = docs.filter(doc => list.data.some(el => doc.name !== el.name && doc.quizmaster !== el.quizmaster && doc.file !== el.file));

任何建议我做错了什么?

先感谢您

标签: javascriptarraysreactjs

解决方案


条件应该是相反的:

docs.filter(doc => !list.data.some(el =>
    doc.name === el.name 
    && doc.quizmaster === el.quizmaster 
    && doc.file === el.file));

或者

docs.filter(doc => list.data.every(el =>
    doc.name !== el.name 
    || doc.quizmaster !== el.quizmaster 
    || doc.file !== el.file));

如果您在热循环中多次执行此操作,请考虑从这些属性(例如el.name + '/' + el.quizmaster...)创建复合键并维护 a Setof 键,在这种情况下您可以摆脱内部过滤器。


推荐阅读