从另一个数组中筛选出一个数组

Nic*_*las 2 javascript typescript lodash angular

所以我有2个对象数组,它看起来像这样

    this.balanceCodes = [
        { ID: 1, StringValue: "dummy" },
        { ID: 2, StringValue: "data" }
    ];
    this.allCodes = [
        { ID: 1, StringValue: "dummy", Color: "red", Order: "low" },
        { ID: 2, StringValue: "data", Color: "green", Order: "medium" },
        { ID: 3, StringValue: "extra", Color: "black", Order: "low" },
        { ID: 4, StringValue: "options", Color: "grey", Order: "high" }
    ];
Run Code Online (Sandbox Code Playgroud)

我想过滤掉this.balanceCodes(基于ID)的对象

所以期望的结果是:

    this.result = [
        { ID: 3, StringValue: "extra", Color: "black", Order: "low" },
        { ID: 4, StringValue: "options", Color: "grey", Order: "high" }
    ];
Run Code Online (Sandbox Code Playgroud)

我该怎么做到这一点?我知道我可以轻松过滤掉一个对象,但是如何为整个对象数组做到这一点?

我被允许使用Lodash.

Ori*_*ori 8

使用_.differenceBy()找到第一个阵列(在项目allCodes未在第二阵列中发现的() balanceCodes):

var balanceCodes = [
    { ID: 1, StringValue: "dummy" },
    { ID: 2, StringValue: "data" }
];
var allCodes = [
    { ID: 1, StringValue: "dummy", Color: "red", Order: "low" },
    { ID: 2, StringValue: "data", Color: "green", Order: "medium" },
    { ID: 3, StringValue: "extra", Color: "black", Order: "low" },
    { ID: 4, StringValue: "options", Color: "grey", Order: "high" }
];

var result = _.differenceBy(allCodes, balanceCodes, 'ID');

console.log(result);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
Run Code Online (Sandbox Code Playgroud)


Alb*_*res 8

您可以通过使用实现这个filterevery,而无需使用lodash:

var balanceCodes = [
    { ID: 1, StringValue: "dummy" },
    { ID: 2, StringValue: "data" }
];

var allCodes = [
    { ID: 1, StringValue: "dummy", Color: "red", Order: "low" },
    { ID: 2, StringValue: "data", Color: "green", Order: "medium" },
    { ID: 3, StringValue: "extra", Color: "black", Order: "low" },
    { ID: 4, StringValue: "options", Color: "grey", Order: "high" }
];

var result = allCodes.filter((code) => 
  balanceCodes.every((balanceCode) => balanceCode.ID !== code.ID));

console.log(result);
Run Code Online (Sandbox Code Playgroud)