我正在尝试比较两个对象,并通过拼接从第一个对象中删除重复的值。有什么最好的解决方案来实现这一目标
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 = [];
答案 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