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.
使用_.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)
您可以通过使用实现这个filter和every,而无需使用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)
| 归档时间: |
|
| 查看次数: |
2409 次 |
| 最近记录: |