javascript - 比较两个数组并删除不匹配的对象

标签 javascript

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

All i need to compare two arrays (array1 and array2) of objects and remove NOT MATCHED objects from the array 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;
        }
    }
}

最佳答案

如果您正在循环 array1i = 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/

相关文章:

javascript - 如何在像 Angular 这样的 javascript MVC 框架上隐藏数据库凭据

javascript - Jquery .show 不更改显示属性

asp.net - 如何使用网站中的 'Launch'按钮启动游戏?

javascript - 如何在 react /故事书中正确使用外部状态

javascript - 我如何将数据存储在可从任何地方访问的 nextjs 中

php - 像 Getty Images 一样的图片库,但没有数据库

javascript - div 内的下拉列表以显示 onmouseover 工具提示

javascript - 如何更改输入容器的样式

javascript - 如果变量之一未定义,则避免出现错误所有脚本停止工作

javascript - 保持相同的 Puppeteer 页面打开 NodeJS