【发布时间】:2026-02-05 06:10:01
【问题描述】:
假设我有两个对象数组:
let ar1 = [{
id: 1,
name: 'abc',
job: 'dev'
}, {
id: 2,
name: 'xyz',
job: 'qa'
},{
id: 3,
name: 'pqr',
job: 'dev'
}
];
let arr2 = [{
id: 1,
name: 'abc',
job: 'dev'
},{
id: 2,
name: 'zzz',
job: 'qa'
},{
id: 3,
name: 'pqr',
job: 'dev'
}];
我需要比较它们,以便我得到“真”并退出比较而不进一步迭代,因为两个对象之间的第二个元素中的名称不同。
我尝试了以下代码:
private compareObjects(obj1, obj2) {
obj1.forEach((x) => {
obj2.forEach((y) => {
if (x.id === y.id) {
return (!_.isEqual(x, y));
}
});
});
}
【问题讨论】:
-
forEach预计不会返回结果。 -
您无法突破
.forEach,这是设计使然,但您可以突破for... of,也是设计使然。在这种情况下,您想使用for...of。但是,如果您想要严格比较,则不需要双 for 循环,因为 arr1.length 必须与 arr2.length 相同(或者它们不相等)并且您还知道 arr1[i] 必须等于 arr2[i],因此您可以使用一个let i=0, e=arr1.length; i <e; i++并在那里节省大量运行时间。 -
您应该考虑使用lodash.com/docs/#find 而不是forEach。找到不同的地方,如果你找到了东西,在顶层,返回 false (不等于)。否则,返回 true。
-
您并没有完全告诉我们您要完成什么,迭代这两个数组有什么意义?根据目标,您可以使用
Array.prototype.find()。
标签: javascript angular lodash