2017-02-13 2 views
1

Я фильтрование массива объектов с помощью функции, которая выглядит следующим образомJavascript Фильтр Refactor

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 
     } 

Мой вопрос: что это лучший способ фильтрации по каждому из ключевых значений элементов списка без необходимости написать новая строка для каждого? то есть, так что я могу не ходить

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

и т.д ..

Любой совет будет здорово.

Спасибо!

ответ

4

Вы можете использовать ключи доступа к объекту с Object.keys и итерации с помощью Array#some.

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

Просто предложение, массив, содержащий все ключи и заколки их?

Как

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; 

Ах блин, та же идея, что и выше, только слишком долго писать: D

Смежные вопросы