【问题标题】:Filter array of types, based on array of properties in type根据类型中的属性数组过滤类型数组
【发布时间】:2020-07-29 01:16:18
【问题描述】:

我在一个 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 创建一个数组,它只包含名称属性与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()...

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

【问题讨论】:

    标签: arrays angular typescript rxjs filtering


    【解决方案1】:

    您可以使用数组的includes method 来简化此操作。

    customTypesArr.filter(item => customTypesNamesArr.includes(item.name));
    

    基本上,只需做一个过滤器,检查每个项目的名称是否为includeed 允许的名称数组。

    【讨论】:

      【解决方案2】:
        var filtered = customTypesArr.filter(function(item) 
        {
         return customTypesNamesArr.indexOf(item.name) !== -1;
        });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-29
        • 2015-10-13
        • 2022-12-18
        • 2021-12-17
        • 1970-01-01
        相关资源
        最近更新 更多