javascript - 使用字典过滤javascript数据对象

标签 javascript dictionary filter

假设我有一个过滤器:

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

最佳答案

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

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

关于javascript - 使用字典过滤javascript数据对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51662955/

相关文章:

javascript - 如何使用 Vue.js 使选择下拉菜单成为第二个导航并使用选项卡?

JavaScript 代码在我以一种方式编写时不运行,但在我稍作修改时运行

python - 使用 python 日志过滤不同记录器的正确方法是什么?

python - 使用字典而不是排序然后搜索

WPF 基于 ListView 项目过滤组合框项目

java - 过滤数组中的差异

javascript - OpenLayers 3 中的 Popover 覆盖不会超出视野

javascript - Dreamweaver CC 中有控制台日志吗?

python - 如何重写 python 字典以获取默认值

c++ - std::map 多线程中的奇怪资源争用