javascript - 基于具有过滤值的对象过滤数据
问题描述
我的应用程序中有一些过滤器。每当我单击搜索时,应根据搜索值过滤数据。我不知道是否有更好的方法可以以更酷的方式或花哨的方式来做我想做的事情。搜索值的存储方式如下:
FORM_VALUES =
{
title: '',
name: 'John',
Age: 56
}
如果对象的值为空,''
那么我在过滤对象数组时不应该考虑它们。我的对象数组如下所示:
[
{
title:'CEO',
name: 'John',
Age: 56
},
{
title: null,
name: 'George',
Age: 56
},
]
在这个例子中,它应该返回数组的第一个元素。
我的代码:
data.filter(d => {
if ((d.title === FORM_VALUES.title || FORM_VALUES.title === '')
&& (d.name === FORM_VALUES.name || FORM_VALUES.name === '')
&& (d.age === FORM_VALUES.age || FORM_VALUES.age === '')) {
return d;
}
});
解决方案
FORM_VALUES
使用 . 从对象中获取键/值对数组Object.entries()
。Array.every()
为每一对迭代对数组,true
如果过滤器的值''
(空字符串)或值与当前对象的值匹配,则返回。
const FORM_VALUES = {"title":"","name":"John","Age":56}
const data = [{"title":"CEO","name":"John","Age":56},{"title":null,"name":"George","Age":56}]
const result = data.filter(o =>
Object.entries(FORM_VALUES)
.every(([k, v]) => v === '' || o[k] === v)
)
console.log(result)
推荐阅读
- python - Python Selenium 无法访问 Tableau 小部件
- javascript - 如何使用 JavaScript 将名称列表与相关数据项列表中的聚合数据值映射?
- amazon-web-services - AWS API Gateway 403 Forbidden response OPTIONS
- ssis - BIML 类块错误:“AstTableNode”不包含“GetTag”的定义,并且没有可访问的扩展方法“GetTag”
- c# - 如何针对旧版本的库运行 .NET 核心应用程序
- python - 使用 python 从 bigquery 调用外部表
- networking - 当 VPN 在 WSL2 中打开时,如何从 WSL2 ping 窗口
- android - 使用相机2。当我调用 closeCamera 时,显示最后看到的帧而不是黑屏
- elasticsearch - 即使在设置 request_cache=true 之后,我也没有看到代价高昂的 ES 查询的性能提升
- python-3.x - 如何从 html 报告中删除跳过的测试