2017-02-13 2 views
1

ich ein Array von Objekten bin Filterung unter Verwendung einer Funktion, die wie folgtJavascript Filter Umgestalten

var val = 'some text value' 

this.someList = this.someList.filter(containsQuery); 

     function containsQuery(listItem) { 

     return listItem.Key_One.toLowerCase().indexOf(val) > -1 || 
       listItem.Key_Two.toLowerCase().indexOf(val) > -1 || 
       listItem.Key_Three.toLowerCase().indexOf(val) > -1 
     } 

Meine Frage sieht, was ein auf jeder der Listenpunkt Schlüsselwerte bessere Art der Filterung ist eine, ohne schreiben neue Zeile für jeden? das heißt, so kann ich vermeiden

listItem.Key_Four.toLowerCase().indexOf(val) > -1 
listItem.Key_Five.toLowerCase().indexOf(val) > -1 

etc gehen ..

Jede Beratung wäre toll.

Danke!

Antwort

4

Sie können Schlüssel des Objekts mit Object.keys abrufen und mit Array#some iterieren.

function containsQuery(listItem) { 
    return Object.keys(listItem).some(function (k) { 
     return listItem[k].toLowerCase().indexOf(val) > -1; 
    }); 
} 
3

Nur ein Vorschlag, Array enthält alle Schlüssel und loopen sie?

Wie

var keys = ['key_one', 'key_two', 'key_three', 'key_four']; 
for (i=0; i<keys.length; i++){ 
if (listItem[keys[i]].toLowerCase().indexOf(val) > -1) return true; 
} 
return false; 

Ah verdammt, gleiche Idee wie oben, nahm einfach zu lange Schreiben: D