Более чистый способ фильтрации данных
У меня есть данные, которые находятся в массиве структур. У меня нет доступа к переменной запроса, и мне нужно отфильтровать данные. Так вар у меня
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)
в цикле, а также.