繁体   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