Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

774
Visualizações
ngPara eliminar duplicados en la lista observable

Quiero eliminar los valores duplicados en la lista observable. ¡Solo en plantilla, sin cambiar componente!

Usando el índice, quiero eliminar valores duplicados en doble * ngFor.

¿Hay alguna manera?

 <div class="order-list-row" *ngFor="let list of sandbox.orderList$ | async;"> <div class="olr-header flex"> <div class="olrh-lft flex"> <div class="olrh-lft-col"> <h5>주문코드</h5> <p>{{list.orderPrefixId}}</p>

Quiero saltarme los valores(list.orderPrefixId) que ya han sido impresos aplicando una condición(usando index)

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Podría usar una directiva o, mejor aún, una lógica como esta está destinada a permanecer en su archivo de componentes. Hacer este tipo de filtrado en su archivo de plantilla es un mal diseño en sí mismo.

Suscríbase al observable en su archivo de componente y realice su filtrado allí

over 4 years ago · Santiago Trujillo Relatório

0

Me doy cuenta de que pidió una solución en la plantilla, pero le daré 2 soluciones sensatas. Uno de los cuales no está realmente en la plantilla, pero también conserva el observable original:

 obs$: Observable<number[]> = of([1, 2, 3, 3, 4, 4, 4, 5]); filteredObs$ = this.obs$.pipe( map((arr) => { return new Set(arr); }) );

En plantilla:

 <p *ngFor="let n of filteredObs$ | async"> {{ n }} </p>

Si desea que el filtrado se realice en la plantilla , puede crear una función:

 filterArray(arr: number[]): number[] { return Array.from(new Set(arr)); }

En plantilla:

 <p *ngFor="let n of filterArray(obs$! | async)"> {{ n }} </p>

Solo usé un número [] en este ejemplo, pero la idea es la misma para los objetos, el mapeo sería un poco más complejo. Hay muchos ejemplos de eso en la red, pero si necesita ayuda con eso, solo pregunte.

Aquí está mi ejemplo en un StackBlitz .

over 4 years ago · Santiago Trujillo Relatório

0

Realmente el mejor enfoque es crear un nuevo observable con los valores únicos

si su sandbox.orderList$ regresa, por ejemplo, a algunos les gusta

 [{id:0},{id:1},{id:2},{id:2},{id:3},{id:0},...]

Puedes definir

 orderListUnique$=this.sandbox.orderList$.pipe( map((res:any[],i:number)=> res.reduce((a,b)=>a.find(x=>x.id==b.id)?a:[...a,b],[]) ))

Y use orderListUnique$ |async

solo por diversión

Si tu lista está ordenada puedes escribir algún "bizarro" como

 <ng-container *ngIf="{ values: values$ | async } as values"> <ng-container *ngFor="let value of values.values; let i = index"> <ng-container *ngIf="i == 0 ? null : '' + values.values[i - 1].id as old"> <p *ngIf="value.id != old"> {{ value.id }} </p> </ng-container> </ng-container> </ng-container>

Si su lista no está ordenada, necesita tener una matriz con la clave para ordenar, por ejemplo, si tiene una variable "indexValues"

 obs$=observable.pipe( tap((res:any[])=>this.indexValues=res.map(x=>x.id)))

Y use

 <ng-container *ngFor="let value of objValues$ | async; let i = index"> <ng-container *ngIf="indexValues.indexOf(value.id) == i"> <p> {{ value.id }} </p> </ng-container> </ng-container>

Puedes ver el enfoque en este stackblitz

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda