我的棱角项目上有以下结构:
export interface Campo {
id?: number;
nome?: string;
tabela?: Tabela;
campos?: Campo[];
}
export interface Tabela {
id?: number;
name?: string
arquivo?: Arquivo;
}
export interface Arquivo {
id?: number;
name?: string;
tabelas?: Tabela[];
}
即,“ Arquivo”具有许多“ Tabela”,而“ Tabela”具有许多“ Campo”。我订阅了返回所有“ Campo”的服务,并将其保留在“ campos”变量上。该服务返回200多个“ Campos”,与大约10个“ Tabelas”和3个“ Arquivos”相关。
我想返回所有唯一的“ Arquivo”(即全部3个“ Arquivo”)。
当我这样做时:
let arquivos = this.campos
.map(campo => campo.tabela.arquivo.id)
.filter((value, index, self) => self.indexOf(value) === index);
返回
[1001、1002、1003]
这就是我所有3个“ Arquivo”的ID。但是我不想要ID,我想要“ Arquivo”对象。当我尝试时:
let arquivos = this.campos
.map(campo => campo.tabela.arquivo)
.filter((value, index, self) => self.indexOf(value) === index);
它返回200个以上的寄存器,因为我有200个以上的“ Campos”,并且它不知道什么“ Arquivos”是唯一的。
我该怎么做?
答案 0 :(得分:1)
您可以尝试将唯一的arquivo ID映射到arquivo对象,然后获取值
let arquivos = Object.values(this.campos
.map(campo => campo.tabela.arquivo)
.reduce((totals, arquivo) => {
if (!totals[arquivo.id]) {
totals[arquivo.id] = arquivo;
}
return totals;
}, {})
);