如何比较两个对象并删除重复的对象

时间:2019-03-19 21:09:00

标签: javascript typescript array-splice

我正在尝试比较两个对象,并通过拼接从第一个对象中删除重复的值。有什么最好的解决方案来实现这一目标

Record1 = [{"ID":"938"},{"ID":"939"}];

Record2 = [{"IDN":"938"},{"IDN":"939"}];

for (var k = 0; k < Record1.length; k++) {
    for (var l = 0; l < Record2.length; l++) {
        if (Record1[k].ID == Record2[l].IDN) {
            Record1.splice(k, 1);
            break;
        }
    }
}

console.log(''+ JSON.stringify(Record1));

Actual result> Record1 = [{"ID":"939"}];

Expected result> Record1 = [];

1 个答案:

答案 0 :(得分:1)

在通过Record1循环对其进行迭代时,您正在对for进行突变,该循环从索引0开始并向上递增-这意味着某些项目将丢失。 (例如,如果您break的{​​{1}}为0,则拼接后索引为0的 new 项将永远不会被检查。)从 end < / em>改为k,以便拼接的Record1索引将始终引用正确索引处的元素:

k

或者更好的方法是使用Record1 = [{"ID":"938"},{"ID":"939"}]; Record2 = [{"IDN":"938"},{"IDN":"939"}]; for (var k = Record1.length - 1; k >= 0; k--) { for (var l = 0; l < Record2.length; l++) { if (Record1[k].ID == Record2[l].IDN) { Record1.splice(k, 1); break; } } } console.log(''+ JSON.stringify(Record1));来降低计算复杂度,并使用Set来创建新的数组:

filter