[英]Filter array of objects by their values
我希望迭代一array
objects
,这里为了说明的目的是Users
。 我想使用提供的搜索词和每个objects
属性的值来过滤这些Users
。
我提出了以下可行的解决方案,但是,我想看看是否有人有更优雅的方法?
let users = [
{
first_name: "Super",
last_name: "User"
},
{
first_name: "Admin",
last_name: "Istrator"
}
];
function filterObjects(collection, term) {
let filtered = [];
_.each(collection, obj => {
_.forOwn(obj, (value, key) => {
if (value.includes(term)) {
filtered.push(obj);
}
});
});
return filtered;
}
console.log(filterUsers(users, "Su"));
[编辑]
我对对象上任何字段的结构、名称或数量不做任何假设,因此我不想使用诸如object.field_name === 'something'
类object.field_name === 'something'
。
您可以过滤并使用_.some()
来迭代值,并使用Array.includes()
(或 lodash 等效项)检查值中是否存在该术语。
const filterUsers = (collection, term) => collection.filter(o => _.some(o, v => v.includes(term))); const users = [{"first_name":"Super","last_name":"User"},{"first_name":"Admin","last_name":"Istrator"}]; console.log(filterUsers(users, "Su"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>
同样的想法使用lodash/fp :
const { filter, some, includes } = _; const filterUsers = term => filter(some(includes(term))); const users = [{"first_name":"Super","last_name":"User"},{"first_name":"Admin","last_name":"Istrator"}]; console.log(filterUsers("Su")(users));
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>
没有第三方库的解决方案可能是:
var term = 'Su';
var filtered = users.filter(({first_name, last_name}) => {
return (first_name.includes(term) || last_name.includes(term));
});
console.log(filtered);
希望对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.