我正在努力比较两个对象数组,并从第一个数组中删除不匹配的对象。
我需要比较两个对象的数组(array1和array2),
从数组中删除未匹配的对象1。
这是我到目前为止所做的,但是删除了所有项目。
for (var i = 0, len = array1.length; i < len; i++) {
for (var j = 0, len2 = array2.length; j < len2; j++) {
if (array1[i].Id != array2[j].Student.Id) {
array1.splice(j, 1);
len= array1;
}
}
}
最佳答案
如果使用array1
循环遍历i = 0, len = array1.length; i < len; i++
,但是在循环中,您从array1
中删除了一个条目,那么您认为在下一个循环中会发生什么?
您似乎也正在删除找到的内容,但您的问题是您想删除未找到的内容。在下面,根据您的评论,我将删除未找到的内容。
在这种情况下,请使用while
循环。我还会使用Array#some
(ES5 +)或Array#find
(ES2015 +)而不是进行内部循环:
var i = 0;
var entry1;
while (i < array1.length) {
entry1 = array1[i];
if (array2.some(function(entry2) { return entry1.Id === entry2.Student.Id; })) {
// Found, progress to next
++i;
} else {
// Not found, remove
array1.splice(i, 1);
}
}
或者,如果可以创建一个新数组,请使用
filter
:array1 = array1.filter(function(entry1) {
return array2.some(function(entry2) { return entry1.Id === entry2.Student.Id; }));
});
关于javascript - 比较两个数组并删除不匹配的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35035456/