繁体   English   中英

使用 javascript 或 lodash 过滤具有多个元素及其值的对象数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM