2017-02-13 75 views
1

我使用看起来像这样的Javascript过滤重构

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