打字稿筛选器数组由另一个数组

时间:2019-04-05 23:35:26

标签: typescript

我需要用另一个对象数组过滤一个对象数组。我该如何使用Typescript?

下面的TS除最后一行外有效。

目标:获取为CountyId = 1提供服务的所有供应商。

供应商可以为多个县提供服务。

有3个供应商,一个县排名第一,两个县排名第二。

var all_vendors = [{ id: 1, name: 'A' }, { id: 2, name : 'B'}, { id: 3, name : 'c'}];
console.log('all vendors');
console.log(all_vendors);
var all_vendor_counties = [{ id: 1, vendorId: 1, countyId: 1 }, { id: 2, vendorId: 2, countyId: 1 }, { id: 3, vendorId: 2, countyId: 2 },];
console.log('All Vendor Counties')
console.log(all_vendor_counties);
var filtered_vendor_counties = all_vendor_counties.filter(a => a.countyId === 1);//return two vendor_counties.
console.log('Filtered Vendor Counties')
console.log(filtered_vendor_counties); 
//??? var allVendorsInCounty1 = all_vendors.filter( a=> //a is in filtered_vendor_counties)

1 个答案:

答案 0 :(得分:1)

首先遍历all_vendor_counties以创建一个包含所有要过滤的vendorId的集合,然后根据供应商的{{1} }包含在该Set中:

filter

(也可以使用数组并使用all_vendors而不是Set的id,但是var all_vendors = [{ id: 1, name: 'A' }, { id: 2, name : 'B'}, { id: 3, name : 'c'}]; var all_vendor_counties = [{ id: 1, vendorId: 1, countyId: 1 }, { id: 2, vendorId: 2, countyId: 1 }, { id: 3, vendorId: 2, countyId: 2 },]; const vendorIds = new Set(all_vendor_counties .filter(({ countyId }) => countyId === 1) .map(({ vendorId }) => vendorId) ); const vendorsInCountyIds = all_vendors.filter(({ id }) => vendorIds.has(id)); console.log(vendorsInCountyIds);具有更高的计算复杂度)