首页 > 解决方案 > 我如何从对象中过滤未定义

问题描述

我想创建一个 MySQL 查询来过滤来自 MySQL 的数据。但我遇到了一个问题。我写了一个 for 循环,在其中我用 jQuery 计算分区的元素。我也发现了那个东西的问题。

首先是我的功能。

function filterFunnel(filterid){
    let filterLists = $("#funnel-filters").children().filter(".filter");
    let query = `SELECT * FROM funnel WHERE `;
    let count = 0;
    for(i=0;i<Object.keys(filterLists).length; i++){
        let dom = filterLists[i];
        if(dom.value === "Select" || dom.value === ""){

        }else{
            if(count >= 1){
                query += ` AND ${dom.id} = ${dom.value}`;
            }else{
                query += `${dom.id} = ${dom.value} `
            }
            count += 1;
        }
    }
    console.log(query);
}

当我执行这个命令时,我得到一个错误 dom is not defined 我发现这是从哪里来的。

如果您查看我执行的第二个函数,它会返回 2 undefined。

现在,当我在循环内使用 console.log() 时,它正在工作,但当我在它之外使用它时它不起作用。

在此处输入图像描述

我认为异步函数可以解决这个问题,但我不知道如何做到这一点。我相信问题仅由 dom 变量引起。

标签: javascriptjqueryhtml

解决方案


我通过检查响应是否未定义来修复它,如果是,那么它将返回查询。这就是我所做的。

function filterFunnel(filterid){
    let filterLists = $("#funnel-filters").children().filter(".filter");
    let query = `SELECT * FROM funnel WHERE `;
    let count = 0;
    for(i=0;i<Object.keys(filterLists).length; i++){
        let dom = filterLists[i];
        if(dom === undefined){
            return query;
        }else{
            if(dom.value === "Select" || dom.value === ""){

            }else{
                if(count >= 1){
                    query += ` AND ${dom.id} = ${dom.value}`;
                }else{
                    query += `${dom.id} = ${dom.value} `
                }
                count += 1;
            }   
        }
    }
}

推荐阅读