2017-11-21 3 views
-1

Ich versuche, mehrere Werte in Typoskript zurückzugeben, Suchfilter zu implementieren. Wenn die Rückkehr separat funktioniert, funktioniert gut, aber wenn ich versuche, beide zurückzukehren scheint es nicht funktioniert.Wie gibt man mehrere Werte von einer Filterfunktion zurück?

Hier ist mein Code:

import { Pipe, PipeTransform } from '@angular/core'; 
@Pipe({ name: 'category' }) 

export class CategoryPipe implements PipeTransform { 
    transform(categories: any, searchText: any): any { 
    if(searchText == null) return categories; 

    return categories.filter(
     function(category){ 
     var a = category.DistrictName.toLowerCase().indexOf(searchText.toLowerCase()) > -1; 
     var b = category.Population.toLowerCase().indexOf(searchText.toLowerCase()) > -1; 
     return a; 
     //return [a,b]; 
     } 
    ) 

    } 
} 
+0

Verwenden '.map' statt' .filter' –

+0

Aber Wie auch immer, deine Absicht ist unklar. Was ist die logische Bedingung, unter der eine 'Kategorie' in das resultierende gefilterte Array eingeschlossen wird? –

+0

Zum Beispiel, wenn für eine bestimmte "Kategorie", "a" wahr ist und "b" falsch ist oder umgekehrt, sollte es enthalten sein? –

Antwort

0

Returning categories.filter (Kategorien) wird Array aller Wert in Kategorien Array zurückgeben, die die in der Logik genannten Bedingung entsprechen. In Ihrem Fall versuchen Sie, die booleschen Werte zurückzugeben. Grundsätzlich, wenn Sie unter den Kategorien filtern mögen, wo Kreis Name einig Suchtext oder Bevölkerung hat einigen Suchtext, dann können Sie so etwas wie unten tun:

var searchText = 'ist2'; 
var categories = [ 
      { 
    'DistrictName': 'dist1', 
    'Population': 'pop1' 
    }, 
    { 
    'DistrictName': 'dist2', 
    'Population': 'popist2' 
    }, 
    { 
    'DistrictName': 'dist3', 
    'Population':'pop3' 

    }   
    ]; 


    function test() { 

     return categories.filter(
     function(category){ 
      return    
category.DistrictName.toLowerCase(). 
     indexOf(searchText.toLowerCase()) > -1 || 
category.Population.toLowerCase() 
    .indexOf(searchText.toLowerCase()) > -1; 
    }); 

} 

    var filteredArray = test(); 
    console.log(filteredArray); 

    //output 

    **[{ 
    'DistrictName': 'dist2', 
    'Population': 'popist2' 
    }]** 
0

Hier ist, wie die Array.filter Methode funktioniert: es ein Funktionsargument, deren ersten nimmt das nächste Element im Array, führt eine gewisse Logik und gibt einen Wert zurück, wenn der Wert truthy, dann wird es das Element in das erzeugte Array einschließen. Dies wird verwendet, um filter ein Array, um eine Änderung des Arrays nicht zu erzeugen. Ihre Intention ist etwas unklar, aber Sie möchten wahrscheinlich map anstelle von filter

+0

Ich habe den vollständigen Code gepostet –

Verwandte Themen