使用函数编程过滤Typescript中的数组[filter,map,some,reduce etc]

ir2*_*pid 2 javascript functional-programming rxjs typescript ionic-framework

我正在尝试使用函数式编程

我有两个数组

arr1=[{prodId:2}{prodId:4}]

arr2=[{id:1, name:"Test1"},
      {id:2, name:"Test2"},
      {id:3, name:"Test3"},
      {id:4, name:"Test4"},
      {id:5, name:"Test5"}]
Run Code Online (Sandbox Code Playgroud)

使用组合

过滤,映射,一些,减少功能

我想从arr2中提取项目

where arr2.id === arr1.prodId 
Run Code Online (Sandbox Code Playgroud)

我的输出arr将是:

  [{id:2, name:"Test2"},
  {id:4, name:"Test4"}]
Run Code Online (Sandbox Code Playgroud)

我试图避免forEach并使用函数式编程.

Mih*_*nut 5

你应该filter结合使用方法includesmap.

let arr1=[{prodId:2},{prodId:4}], arr2=[{id:1, name:"Test1"}, {id:2, name:"Test2"}, {id:3, name:"Test3"}, {id:4, name:"Test4"}, {id:5, name:"Test5"}];
let ids = arr1.map(({prodId}) => prodId);
let result = arr2.filter(({id}) => ids.includes(id));
console.log(result);
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用some方法.

let arr1=[{prodId:2},{prodId:4}], arr2=[{id:1, name:"Test1"}, {id:2, name:"Test2"}, {id:3, name:"Test3"}, {id:4, name:"Test4"}, {id:5, name:"Test5"}];

let result = arr2.filter(({id}) => arr1.some(({prodId}) => prodId == id));
console.log(result);
Run Code Online (Sandbox Code Playgroud)