2016-07-27 8 views
0

Ich habe eine Gruppe von Arrays auf meine Angular2 App, die ich benutze eine gruppierte Liste mit *ngFor meiner Ansicht nach bauen:Angular 2-Rohr-Arrays filtern gruppiert

[ 
    { 
    category: 1, 
    items: [{ id: 1, name: "helloworld1" }, { id: 2, name: "helloworld2" }] 
    }, 
    { 
    category: 2, 
    items: [{ id: 3, name: "helloworld3" }, { id: 4 }] 
    }, 
    { 
    category: 3, 
    items:[{ id: 5 }, { id: 6 }] 
    } 
] 

Ich habe auch eine boolean, dass, wenn es wahr ist sollte nur die Elemente mit der Eigenschaft name filtern. Wenn eine Gruppe kein Element hat, das dieser Bedingung entspricht, sollte sie nicht bestehen. So wäre das Ergebnis das folgende, wenn die boolean true ist:

[ 
    { 
    category: 1, 
    items: [{ id: 1, name: "helloworld1" }, { id: 2, name: "helloworld2" }] 
    }, 
    { 
    category: 2, 
    items: [{ id: 3, name: "helloworld3" }] 
    } 
] 

Wie kann ich ein Rohr implementieren diese Art von Ergebnis zu erzielen?

Antwort

1

http://plnkr.co/edit/je2RioK9pfKxiZg7ljVg?p=preview

@Pipe({name: 'filterName'}) 
export class FilterNamePipe implements PipeTransform { 
transform(items: any[], checkName: boolean): number { 
    if(items === null) return []; 
    let ret = []; 
    items.forEach(function (item) { 
    let ret1 = item.items.filter(function (e) { 
     return !checkName || (checkName && (e.name !== undefined)); 
    }); 
    if(ret1.length > 0) { 
     item.items = ret1; 
     ret.push(item); 
    } 
    }); 
    return ret; 
    } 
} 
+0

Dank! Genau das habe ich gesucht !! –