首页 > 解决方案 > 我正在寻找一种方法来根据其他数组的值从我的选择数组中删除项目

问题描述

我正在尝试从选择数组中删除与我的其他数组匹配的选项,它们都来自 api 并且通过 ngFor 显示,我已经在尝试使用过滤器但没有成功,代码如下:

  loadUnidadeUsuarios() {
    return this.restApi.getUnidadeUsuarios(this.id).subscribe((data: UnidadeUsuario) => {
      this.unidadeUsuarioData = data;
    });
  }

然后加载 UnidadeUsuarioData 后,我需要删除匹配的用户:

 loadUsuarios() {
    return this.restApi.getUsuarios().subscribe((data: Usuario) => {
    this.Usuario = data;

    this.Usuario = this.Usuario.filter(usuario => usuario.id !== this.unidadeUsuarioData.id )
    });
 }

但没有成功

标签: javascriptarraysangularfilter

解决方案


过滤器看起来像

this.Usuario.filter(usuario=>!this.unidadeUsuario.find(x=>x.id==usuario.id)

但是,如果您需要等待两个呼叫完成,您必须考虑到这一点。为此使用 switchMap

this.restApi.getUnidadeUsuarios(this.id).pipe(
  switchMap((res: any[]) => {
    //..here you has your getUnidadeUsuario...
    //but you want the others usuarios
    return this.restApi.getUsuarios().pipe(map((usuarios: any[]) => {
      //in usuarios you has all the usuarios
      //but you want filtered
      return usuarios.filter(u => !res.find(x => x.id == u.id))
    }))
  })
).subscribe(usuarios => {
  console.log(usuarios)
})

推荐阅读