javascript - 使用 javascript 或 lodash 过滤具有多个元素及其值的对象数组
问题描述
我有一个对象数组,如下所示。
const data =
[
{id: 1, name: 'Peter',age: 21, gender: 'Male'},
{id: 2, name: 'Steve',age: 24, gender: 'Male'},
{id: 3, name: 'John',age: 21, gender: 'Male'},
{id: 4, name: 'Julie',age: 26, gender: 'Female'}
]
我想使用 javascript 或 lodash 动态过滤具有多个元素及其值的上述数组。如果我向对象添加更多元素并尝试使用相同的过滤器,代码应该可以正常工作。我期望从如下对象传递需要过滤的元素和相应的值。
const filter = {'name':'e','gender':'mal'}
预期输出:
[{id: 1, name: 'Peter',age: 21, gender: 'Male'},
{id: 2, name: 'Steve',age: 24, gender: 'Male'},
{id: 4, name: 'Julie',age: 26, gender: 'Female'}]
解决方案
您可以通过使用条目和Array#every
使用所有过滤器或Array#some
仅具有对象的一个过滤器属性进行过滤。
const
data = [{ id: 1, name: 'Peter', age: 21, gender: 'Male' }, { id: 2, name: 'Steve', age: 24, gender: 'Male' }, { id: 3, name: 'John', age: 21, gender: 'Male' }, { id: 4, name: 'Julie', age: 26, gender: 'Female' }],
filter = { name: 'Pe', gender: 'Mal' },
filters = Object.entries(filter),
result1 = data.filter(o => filters.every(([k, v]) => o[k].includes(v))),
result2 = data.filter(o => filters.some(([k, v]) => o[k].includes(v)));
console.log(result1);
console.log(result2);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- r - 使用代理增长趋势的 R 时间序列缺失数据插补/插值
- .net - Cosmos SDK 在未指定分区的查询上返回空结果
- c - 释放邻接表
- 3d - Blender Viewport Shading(在 3D 视图中显示/着色对象的方法:材质预览)问题
- google-chrome - https 请求在浏览器中显示 ERR_EMPTY_RESPONSE 但通过 curl 工作
- java - flink table API 上的单个作业中的多个选择查询
- oracle-sqldeveloper - 在 Oracle SQL developer 12c 中创建本地连接
- reactjs - ChunkLoadError:加载块 # 失败。电子反应样板
- android-studio - 自动保存(SharedPreferences)动态创建的表格行编辑文本值
- python - Matplotlib - 紧凑的布局放置和调整填充