【问题标题】:How to make angular pipe for filtering array如何制作用于过滤阵列的角管
【发布时间】:2021-06-01 09:16:21
【问题描述】:

这是我要过滤的数组

[
    0: {id: 1, name: "Berlin",}
    1: {id: 2, name: "Proffesor",}
    2: {id: 4, name: "Oslo",}
    3: {id: 6, name: "Denver",}
]

这是过滤器的数组

 [6, 16, 2, 10, 24]

这是我的烟斗

export class ChatPipe implements PipeTransform {

  transform(user: Users[], args: any): any { //for users i use first array and for args I use second
    if (!user || !args) {
      return user;
      
  }
  
  let filteri = user.filter(users => users.id == args);
  
  return filteri;
};

}

我想使用另一个数组的值过滤第一个数组。谁能帮帮我?

【问题讨论】:

  • let filteri = user.filter(item => args.includes(item.id)); 应该可以解决问题

标签: arrays angular typescript pipe


【解决方案1】:

改变这个:

// let filteri = user.filter(users => users.id == args);
// return filteri;
return (user || []).filter((item: any) => (args || []).includes(item.id));

【讨论】:

    【解决方案2】:

    事件虽然你没有告诉我们你想要的输出,但我猜你想用第二个数组的值过滤第一个数组。

    首先将你的用户数组创建成一个数组:

    而不是这个:

    [
        0: {id: 1, name: "Berlin",}
        1: {id: 2, name: "Proffesor",}
        2: {id: 4, name: "Oslo",}
        3: {id: 6, name: "Denver",}
    ]
    

    把它变成这样:

    [
        {id: 1, name: "Berlin"},
        {id: 2, name: "Proffesor"},
        {id: 4, name: "Oslo"},
        {id: 6, name: "Denver"},
    ]
    

    之后你的管道应该是这样的:

    @Pipe({
        name: 'filterUsersByIds',
        pure: false
    })
    export class FilterUsersByIdsPipe implements PipeTransform {
        transform(users: user[], filters: number[]): any {
            if (!users || !filters) {
                return users;
            }
            
            return users.filter(user => filters.some(x => user.id === x));
        }
    }
    

    PS:在 HTML 中使用管道之前,不要忘记在模块中声明管道。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-12
      • 1970-01-01
      • 2021-12-12
      相关资源
      最近更新 更多