![](/img/trans.png)
[英]How to filter collection with multiple conditions (strings and array of values) using lodash javascript
[英]Filter an array of objects with multiple elements with their values using javascript or lodash
我有一个 object 数组,如下所示。
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 动态过滤具有多个元素及其值的上述数组。 如果我向 object 添加更多元素并尝试使用相同的过滤器,代码应该可以正常工作。 我希望从 object 中传递需要过滤的元素和相应的值,如下所示。
const filter = {'name':'e','gender':'mal'}
预期 Output:
[{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
来过滤只有 object 的一个过滤器属性。
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; }
使用 Object.entries 将键和值从过滤器 object 中分离出来,通过使用键和小写该值来查找值,因为您不区分大小写字母
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'} ] const filter = { 'name': 'e', 'gender': 'mal' } const result = data.filter(x => Object.entries(filter).every(([key, val]) => x[key].toString().toLowerCase().includes(val))) console.log(result)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.