Более чистый способ фильтрации данных - PullRequest
0 голосов
/ 19 ноября 2018

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

    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 Ответ

0 голосов
/ 19 ноября 2018

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

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) в цикле.

...