Более чистый способ фильтрации данных

У меня есть данные, которые находятся в массиве структур. У меня нет доступа к переменной запроса, и мне нужно отфильтровать данные. Так вар у меня

    arData = arData.filter(
        function(item){
            return (form.searchPhrase == "" 
                ||
                item.name CONTAINS form.searchPhrase
                ||
                item.company CONTAINS form.searchPhrase
                ||
                item.address CONTAINS form.searchPhrase
                ||
                item.address2 CONTAINS form.searchPhrase
                ||
                item.city CONTAINS form.searchPhrase
                ||
                item.state CONTAINS form.searchPhrase
                ||
                item.zip CONTAINS form.searchPhrase
                ||
                item.email CONTAINS form.searchPhrase
                ||
                item.tel CONTAINS form.searchPhrase
                );
        });

Я перебираю все поля в пункте.

Что мне не нравится в этом, так это то, что это кажется очень повторяющимся. Вполне вероятно, что новый структурный ключ может быть добавлен. Или существующий будет удален. Я ищу более чистый способ сделать это.

1 ответ

Решение

Почему бы тогда просто не зациклить свойства элемента?

arData = arData.filter(
    function(item){
        if (form.searchPhrase == "") {
            return true;
        }
        for (itemProperty in item){
            if (isSimpleValue(item[itemProperty]) && item[itemProperty] CONTAINS form.searchPhrase) {
                return true;
            }
        }
        return false;
    });

В случае, если ваш элемент может содержать свойства с null значение (например, если вы читаете JSON из внешнего API), вы хотите проверить structKeyExists(item, itemProperty) в цикле, а также.

Другие вопросы по тегам