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