更清洁的数据过滤方式
Cleaner way to filter data
我有一个结构数组中的数据。我无权访问查询变量,我需要过滤数据。所以我有
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
);
});
我正在查看项目中的所有字段。
我不喜欢的是它看起来重复性很高。很可能可以添加一个新的结构键。或者现有的被删除。我正在寻找一种更简洁的方法来执行此操作。
那为什么不直接遍历项目的属性呢?
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
值的属性(例如,如果您从外部 API 读取 JSON),您需要检查 structKeyExists(item, itemProperty)
也在循环中。
我有一个结构数组中的数据。我无权访问查询变量,我需要过滤数据。所以我有
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
);
});
我正在查看项目中的所有字段。
我不喜欢的是它看起来重复性很高。很可能可以添加一个新的结构键。或者现有的被删除。我正在寻找一种更简洁的方法来执行此操作。
那为什么不直接遍历项目的属性呢?
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
值的属性(例如,如果您从外部 API 读取 JSON),您需要检查 structKeyExists(item, itemProperty)
也在循环中。