打字稿查找数组中的项目,而没有每个项目?

时间:2019-11-08 07:27:06

标签: javascript typescript

我有两个看起来像这样的数组

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)

1 个答案:

答案 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);分隔。另外,请确保先定义,TestAction变量。


如果您不需要单个匹配的Nothing,而是整个对象都在原始Id中,则只需在末尾省略array2

.map