如何制作用于过滤阵列的角管

问题描述

这是我要过滤的数组

[
    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(users => users.id == args);
// return filteri;
return (user || []).filter((item: any) => (args || []).includes(item.id));

,

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

首先创建你的 users 数组,使其像一个数组:

取而代之的是:

[
    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 中使用管道之前,不要忘记在模块中声明管道。