过滤两个敲除阵列以找出差异

filtering two knockout arrays to find the difference

我正在使用敲除并有两个阵列。

我想找出数组之间的区别,即较长数组中不在较小数组中的任何项目。

我有

    console.warn(items1); // 10
    console.warn(items2); // 11

    var filtered = ko.utils.arrayFilter(items1, function (e) {
        return !items2.indexOf(e) > -1;
    });

    console.warn(filtered); // 10

我如何将其更改为使用 1 个新项目进行筛选?

我试过了return items2.indexOf(e) > -1;

我试过在过滤器和 return 上切换数组。

我试过了returnitems2.indexOf(e) == -1;

全部给10, 11, or 0.

如何制作return 1

您可以通过过滤第二个数组中未包含在第一个数组中的项目来获得差异。

const difference = items2.filter(item => !items1.includes(item));

例如,您可以使用过滤器来检查差异

ar1=[1,2,3,4,5,7,8]
ar2=[2,10,9,1,2,3,4,5,7]

dif=ar2.filter(x=>!ar1.some(y=>x==y))
console.log(dif)
// or
dif=ar2.filter(x=>!ar1.includes(x))
console.log(dif)

我建议根据其他答案使用 !includes,但为了完整起见,如果您愿意,可以采用以下方法:

var filtered = ko.utils.arrayFilter(items2, function (e) {
    return !items1.indexOf(e) === -1;
});

ko.utils.arrayFilter 会将您传入的数组中的 return 项作为第一个参数,而您想要较长数组中的项,因此您应该传入 items2。您希望 return 项目 而不是 items1 中,因此 indexOf 将 return -1 用于这些项目.