如何使用angular2 / typescript在过滤器下拉列表中获取相同的名称

时间:2017-07-20 10:38:42

标签: javascript angular

我在table1中有一个过滤器下拉列表,它通过table2条目出现。在表2中,如果我有" Car" 2次,den在过滤器下降也显示2次Car,Car。我如何让它只来一次。请帮忙

HTML代码:

<div class="queryBox col-lg-2 col-md-2 col-sm-2 col-xs-3 taskDiv">
                <label>Vehice</label>
                <ng-select [options]="Vehice" [(ngModel)]="filter.vehice" class='filterDropDown' placeholder="All" [allowClear]="true">
                </ng-select>
            </div> 

Ts代码:

this.ApiService
                .getVehice  ()
                .subscribe(
                  vehicle  => {
                    this.Vehice = vehice.map(function(item) {
                      if(item.vehicle ) {
                        return {"value":item.vehice,"label":item.vehice};
                      }
                    })

2 个答案:

答案 0 :(得分:0)

我不确定是否会使用Pipe来过滤独特的结果。我可能会做这样的事情:

let elements = [{'name' : 'Apple', 'type' : 1}, 
                {'name' : 'Apple', 'type' : 1}, 
                {'name' : 'Pear', 'type' : 4}];

function filterUniqueResults(list: any[]): any[]{
    let uniqueList = [];
    elements.forEach(element => {
       if(uniqueList.indexOf(element) === -1){
          uniqueList.push(element);
       }
    });
    return uniqueList;
}


let result = filterUniqueResults(elements);

这不就是你要求的吗?

从您发布的代码中,您似乎要求其他内容,即“如何根据属性过滤某些值?”你可以用这样的管道来做:

import { Pipe, PipeTransform, Injectable } from '@angular/core';

@Pipe({
    name: 'exclude'
})
@Injectable()
export class FilterPipe implements PipeTransform {
    transform(items: any[], field: string, value: string): any[] {
        if (!items) return [];
        return items.filter(it => it[field] != value);
    }
}

然后

<li *ngFor="let item of items | exclude : 'type' : 4">{{item.name}}</li>

<li *ngFor="let item of items | exclude : 'name' : 'apple'">{{item.name}}</li>

修改 所以回答你的评论:

this.apiService.getVehicles().subscribe(
                  result => this.vehicles  = filterUniqueResults(result));

鉴于你的apiService看起来像这样:

public getVehicles(): Observable<Vehicle[]> {
       return this.http.get("http://whatever")
            .map(res => res.json().data || {})
            .catch(error => console.error(error));
    }

答案 1 :(得分:0)

    var valArray: any = [];

    function functionName(id){
    var idx = this.valArray.indexOf(id);

            if (idx > -1) {
                this.valArray.splice(idx, 1);
            }

            else {
                this.valArray.push(id);
            }
        }

In valArray array you will get the unique records.