Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在筛选器中允许空结果?_Javascript_Jquery - Fatal编程技术网

Javascript 如何在筛选器中允许空结果?

Javascript 如何在筛选器中允许空结果?,javascript,jquery,Javascript,Jquery,我使用此函数过滤数组的元素: function filter(arr, criteria) { return arr.filter(function(obj) { return Object.keys(criteria).every(function(c) { return obj[c] == criteria[c]; }); }); } var newarr = filter(arr, { desc: dv, aasc:

我使用此函数过滤数组的元素:

function filter(arr, criteria) {
    return arr.filter(function(obj) {
        return Object.keys(criteria).every(function(c) {
            return obj[c] == criteria[c];
        });
    });
}
var newarr = filter(arr, { desc: dv, aasc: av, rev: cv, flo: acv }); 
但是,如果用户没有输入任何内容,那么结果将不会返回任何内容。我试图对它进行编码,这样,如果他们没有为特定的标准选择任何内容,那么它就不会过滤它

我试图对它进行编码,这样,如果他们没有为特定的标准选择任何内容,那么它就不会过滤它

那就这样做吧。从用户输入中获取过滤器作为对象,或者
null
如果未提供过滤器,则只需执行以下操作:

var userFilters = ... // get filters
var newarr = userFilters ? filter(arr, userFilters) : arr;
function filter(arr, criteria) {
    if (criteria)
        return arr.filter(function(obj) {
            return Object.keys(criteria).every(function(c) {
                return obj[c] == criteria[c];
            });
        });
    else
        return arr;
}
如果出于某种原因,这对您不起作用,您可以随时像这样重写
过滤器
方法:

var userFilters = ... // get filters
var newarr = userFilters ? filter(arr, userFilters) : arr;
function filter(arr, criteria) {
    if (criteria)
        return arr.filter(function(obj) {
            return Object.keys(criteria).every(function(c) {
                return obj[c] == criteria[c];
            });
        });
    else
        return arr;
}

然而,从您的评论来看,您的意思似乎很简单,如果没有提供值,您希望不应用该筛选器,但其他筛选器仍将应用。在这种情况下,您当前的代码可以工作,只需更改生成filters对象的方式:

var userFilters = {};
if (dv) userFilters[desc] = dv;
if (av) userFilters[aasc] = av;
if (cv) userFilters[rev] = cv;
if (acv) userFilters[flo] = acv;
var newarr = filter(arr, userFilters);

这是因为它仅在指定元素时将其添加到筛选器集合。如果未添加任何项目,则返回未经修改的
arr

您可以检查任何值的条件吗

function filter(arr, criteria) {
if(criteria)
{
    return arr.filter(function(obj) {
        return Object.keys(criteria).every(function(c) {
            return obj[c] == criteria[c];
        });
    });
}
else
{
  return error of some kind. 
}
}

或者您可以在筛选器输入上添加空输入检查

也许我没有得到它,但你不检查一下空值吗

function filter(arr, criteria) {
    return arr.filter(function(obj) {
        return Object.keys(criteria).every(function(c) {
            return !(criteria[c]) || obj[c] == criteria[c];
        });
    });
}

你能解释一下“它不会过滤它”的确切含义吗?前一个建议不起作用:
var userFilters=[{desc:dv,aasc:av,rev:cv,flo:acv}]
var newarr=userFilters?过滤器(arr,userFilters):arr
后一个建议有效,但如果他们没有输入任何一个条件,那么它将显示所有可能的结果,并忽略其他条件。@ChrisRockGM抱歉,我误解了你的要求。请参阅我的更新答案以获取替代方案。我不会检查每个单独的标准。我正在尝试找出如何只过滤用户输入的条件,而忽略用户未输入的条件。因此,在您的其他操作中,您可以执行另一个操作,不显示任何内容,甚至添加dom元素来表示您没有请求任何内容。。标准是他们的输入。。你有数据要处理…你得到了!我真不敢相信我想不出来。谢谢。这个问题的措辞可能会稍微好一点:(干得好!