首页 > 解决方案 > 使用字典过滤 javascript 数据对象

问题描述

假设我有一个过滤器:

filter = [ {key: "pl", value: 3}, {key: "sh", value: 2} ]

我想用上述过滤条件过滤以下 javascript 对象:

var data = [
{title: "The Uncertainty of the Poet ",
pl: 3,
si: 2,
va: 3,
te: 0,
co: 0,
or: 4,
sh: 2,
po: 0,
li: 0,
ar: 5
},
{
title: "Direction",
pl: 4,
si: 3,
va: 1,
te: 3,
co: 0,
or: 3,
sh: 2,
po: 0,
li: 0,
ar: 5
}
...
]

我尝试了以下没有运气:

var result = data.filter(function(d){
            for (item in filter) {
                return d.key==d.value;
            }

标签: javascriptdictionaryfilter

解决方案


检查对象是否满足所有条件的另一个潜在选项:

data.filter(function(obj) {
    return filter.reduce(function(a, f) {
        return a && (obj[f.key] === f.value);
    }, true);
});

由于使用了reduce,因此无需检查 hasOwnProperty 即可工作。如果您想检查任何过滤条件是否为真,您可以将其更改为

data.filter(function(obj) {
    return filter.reduce(function(a, f) {
        return a || (obj[f.key] === f.value);
    }, false);
});

推荐阅读