首页 > 解决方案 > 更简洁的数据过滤方式

问题描述

我有一个结构数组中的数据。我无权访问查询变量,我需要过滤数据。所以我有

    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
                );
        });

我正在检查项目中的所有字段。

我不喜欢的是它似乎高度重复。很可能可以添加一个新的结构键。或者现有的被删除。我正在寻找一种更清洁的方法来做到这一点。

标签: coldfusioncoldfusion-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值的属性(例如,如果您从外部 API 读取 JSON),您也需要检查structKeyExists(item, itemProperty)循环。


推荐阅读