我有两个看起来像这样的数组
array1Values: any[] = [{name: Test}, {name:Action}]
array2: any[] = [{Id: 1 Status: Test}, {Id:2 Status: Test}, {Id:3 Status: Test}, {Id:4 Status: Action}, {Id:5 Status: Nothing}]
我需要从数组2中带回名称为数组1的所有项。 所以过滤列表需要 编号1-4,因为阵列1中存在测试和操作的状态
这是我所拥有的,但是不起作用。我不确定如何直接获取Status的名称,而无需进入数组并将其存储在foreach中。
array2.filter(r => r.Status == 'Test') works fine as its hardcoded
但是,因为array1Values是一个对象数组,所以我需要这样的东西。原因是数组2至少包含其他20个属性,因此我需要根据另一个数组中的值过滤掉该数组。
array2.filter(r => r.Status == array2.name)
答案 0 :(得分:2)
首先在array1Values
中创建一组名称,然后根据该集合中是否有.filter
进行迭代来array2
Status
,然后可以{{ 1}}中找到的ID:
.map
const names = new Set(array1Values.map(val => val.name));
const foundIds = array2
.filter(({ Status }) => names.has(Status))
.map(({ Id }) => Id);
请注意,对象中的每个单独的键值对都需要用const Test = 'foo';
const Action = 'bar';
const Nothing = 'baz';
const array1Values = [{name: Test}, {name:Action}];
const array2 = [{Id: 1, Status: Test}, {Id:2, Status: Test}, {Id:3, Status: Test}, {Id:4, Status: Action}, {Id:5, Status: Nothing}];
const names = new Set(array1Values.map(val => val.name));
const foundIds = array2
.filter(({ Status }) => names.has(Status))
.map(({ Id }) => Id);
console.log(foundIds);
分隔。另外,请确保先定义,
,Test
和Action
变量。
如果您不需要单个匹配的Nothing
,而是整个对象都在原始Id
中,则只需在末尾省略array2
:
.map