【问题标题】:filtering two knockout arrays to find the difference过滤两个敲除数组以找出差异
【发布时间】:2020-10-23 07:01:39
【问题描述】:

我正在使用淘汰赛并且有两个数组。

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

我有

    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

【问题讨论】:

标签: javascript jquery knockout.js


【解决方案1】:

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

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

【讨论】:

  • 我正在寻找第一个中未包含的项目。
【解决方案2】:

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

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

ko.utils.arrayFilter 将返回您作为第一个参数传入的数组中的项目,并且您需要较长数组中的项目,因此您应该传入items2。您希望它返回items1 的项目,因此indexOf 将为这些项目返回-1

【讨论】:

  • 这是正确答案,但最后我使用了 _.differenceBy(items2, items1, 'Id');因为我的数组是对象并且需要 Id。这似乎是一种享受,但你的回答对我的要求是正确的
【解决方案3】:

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

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)

【讨论】:

    猜你喜欢
    • 2016-07-21
    • 1970-01-01
    • 2018-10-31
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多