Javascript 从另一个数组中筛选出一个数组
我有两个对象数组,看起来像这样Javascript 从另一个数组中筛选出一个数组,javascript,angular,typescript,lodash,Javascript,Angular,Typescript,Lodash,我有两个对象数组,看起来像这样 this.balanceCodes = [ { ID: 1, StringValue: "dummy" }, { ID: 2, StringValue: "data" } ]; this.allCodes = [ { ID: 1, StringValue: "dummy", Color: "red", Order: "low" }, { ID: 2, StringValue:
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" }
];
我想筛选出此.balanceCodes
中的对象(基于ID)
因此,预期的结果将是:
this.result = [
{ ID: 3, StringValue: "extra", Color: "black", Order: "low" },
{ ID: 4, StringValue: "options", Color: "grey", Order: "high" }
];
我怎样才能做到这一点?我知道我可以很容易地过滤掉一个对象,但是如何才能对整个对象数组进行过滤呢
我可以使用Lodash。用于查找第1个数组(allcode
)中未在第2个数组(balancecode
)中找到的项目:
var余额代码=[
{ID:1,StringValue:“dummy”},
{ID:2,StringValue:“数据”}
];
var allCodes=[
{ID:1,StringValue:“dummy”,Color:“red”,Order:“low”},
{ID:2,StringValue:“数据”,颜色:“绿色”,顺序:“中等”},
{ID:3,StringValue:“额外”,Color:“黑色”,Order:“低”},
{ID:4,StringValue:“选项”,颜色:“灰色”,顺序:“高”}
];
var结果=u.differenceBy(所有代码,余额代码,'ID');
控制台日志(结果)代码>
您可以通过使用和来实现这一点,而无需使用lodash:
var余额代码=[
{ID:1,StringValue:“dummy”},
{ID:2,StringValue:“数据”}
];
var allCodes=[
{ID:1,StringValue:“dummy”,Color:“red”,Order:“low”},
{ID:2,StringValue:“数据”,颜色:“绿色”,顺序:“中等”},
{ID:3,StringValue:“额外”,Color:“黑色”,Order:“低”},
{ID:4,StringValue:“选项”,颜色:“灰色”,顺序:“高”}
];
var结果=所有代码。过滤器((代码)=>
balanceCode.every((balanceCode)=>balanceCode.ID!==code.ID));
控制台日志(结果)代码>\删除是最好的选择。如果ID是唯一的-类似这样的内容就足够了(使用lodash):
for( let balanceCode of balanceCodes){
_.remove( allCodes, (code) => { code.ID === balanceCode.ID })
}