从另一个数组中过滤出一个数组

5

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

    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" }
    ];

我希望过滤掉在this.balanceCodes中的对象(基于ID)

所以期望的结果是:

    this.result = [
        { ID: 3, StringValue: "extra", Color: "black", Order: "low" },
        { ID: 4, StringValue: "options", Color: "grey", Order: "high" }
    ];

如何实现这个?我知道可以轻松过滤一个对象,但是如何对整个对象数组进行操作?
我可以使用Lodash。
3个回答

16
使用_.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);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>


13
你可以使用 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);


0

_.remove可能是您最好的选择。如果ID是唯一的,可以使用类似以下代码(使用lodash):

for( let balanceCode of balanceCodes){
    _.remove( allCodes, (code) => { code.ID === balanceCode.ID })
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接