我正在努力比较两个对象数组,并从第一个数组中删除不匹配的对象。


  我需要比较两个对象的数组(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/

10-09 18:08
查看更多