javascript - 使用字典过滤 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;
}
解决方案
检查对象是否满足所有条件的另一个潜在选项:
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);
});
推荐阅读
- c - 使用返回 0;in void 功能是否可行?
- ios - 即使提供了隐私链接,App Store 连接仍显示错误“您必须提供隐私政策 url”
- java - 外部 Jar 不工作“无法自动装配”
- spring - 将 SpringBoot 从 2.0.6.RELEASE 更新到 2.1.0.RELEASE 后评估 SpringEL 表达式的异常
- html - 为什么 css 变量会覆盖另一个文件的 css 变量?
- typescript - 如何使用带有返回值的回调函数接口
- java - 找到更大和更低的数字
- c++ - 为什么我用“new”创建的对象不存在超出范围?
- apache-spark - Spark Thrift 服务器在通过 JDBC 传输之前将完整数据集加载到内存中
- selenium - Selenium webdriver 不允许打开多个 Safari 实例。无论如何打开多个实例?