Javascript过滤器重构

时间:2017-02-13 11:24:16

标签: javascript filter

我使用看起来像这样的函数过滤对象数组

 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

等。

任何建议都会很棒。

谢谢!

2 个答案:

答案 0 :(得分:3)

您可以将对象的获取键与Object.keys一起使用,并使用Array#some进行迭代。

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

答案 1 :(得分:2)

只是一个建议,包含所有键的数组并循环它们?

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