簡體   English   中英

按值過濾對象數組

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM