Arrays 根据类型中的属性数组筛选类型数组

Arrays 根据类型中的属性数组筛选类型数组,arrays,angular,typescript,rxjs,filtering,Arrays,Angular,Typescript,Rxjs,Filtering,我在一个Angular 9项目(Typescript)中工作 我有一个字符串数组。我还有一个自定义类型的数组 如何筛选自定义类型的数组,使其仅包含那些其属性与字符串数组中的一个字符串匹配的数组。 下面是一些代码来帮助解释: //I declare a custom type export interface CustomType { id: string; name: string; } //I declare my arrays customTypesArr: CustomType

我在一个Angular 9项目(Typescript)中工作

我有一个字符串数组。我还有一个自定义类型的数组

如何筛选自定义类型的数组,使其仅包含那些其属性与字符串数组中的一个字符串匹配的数组。 下面是一些代码来帮助解释:

//I declare a custom type
export interface CustomType {
  id: string;
  name: string;
}


//I declare my arrays
customTypesArr: CustomType[] = [
    {id: "000", name: "name 1"},
    {id: "001", name: "name 2"},
    {id: "002", name: "name 3"}
];
customTypesNamesArr: string[] = ["name 3", "name 1"];

现在我想从
customTypesArr
创建一个数组,该数组只包含name属性与
customTypesNamesArr
中的任何字符串相同的项。 最终结果将是:

myNewCustomTypesArr: CustomType[] = [
    {id: "000", name: "name 1"},
    {id: "002", name: "name 3"}
];
我想应该是这样的,但我不能完全弄清楚:

customTypesArr.filter(item =>
      customTypesNamesArr.forEach(name => {
        if (name == item.name) {
          return item;
        }
      })
    );
我真的不确定在这个场景中是否应该使用
forEach()

任何帮助都将不胜感激。谢谢。

您可以使用数组的组合来简化此过程

customTypesArr.filter(item => customTypesNamesArr.includes(item.name));
基本上,只需做一个过滤器,检查每个项目的名称是否包含允许的名称数组

  var filtered = customTypesArr.filter(function(item) 
  {
   return customTypesNamesArr.indexOf(item.name) !== -1;
  });