knockout.js 过滤两个敲除数组以找出差异

x3naxklr  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(151)

我使用的是knockout,有两个数组。
我想找出数组之间的差异,也就是说,在较长数组中的任何项目都不在较小数组中。
我已经

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;
我试过在过滤器上切换数组并返回。
我试过返回items2.indexOf(e) == -1;
要么全部给予10, 11, or 0.
如何将其设置为return 1

n6lpvg4x

n6lpvg4x1#

您可以透过筛选第二个数组中未包含在第一个数组中的项目来取得差异。
const difference = items2.filter(item => !items1.includes(item));

zzzyeukh

zzzyeukh2#

我建议使用!includes作为其他答案,但为了完整性起见,这是您在以下情况下保持您的方法的方式:

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

ko.utils.arrayFilter将返回作为第一个参数传入的数组中的项,而您需要的项来自更长的数组,因此您应该传入items2。您希望它返回的项 * 不是 * items1中的项,因此indexOf将为这些项返回-1

x7yiwoj4

x7yiwoj43#

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

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)

相关问题