过滤所有属性值上的对象数组 [英] Filter array of objects on all properties value

查看:89
本文介绍了过滤所有属性值上的对象数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我真的很惊讶,我一直没能找到与我的问题有关的任何事情。我正在寻找一种快速的方法来过滤基于用户文本输入的对象数组。



假设我有这个数组:

  let data = [{
id:1,
first_name:Jean,
last_name: Owens,
email:jowens0@google.ru,
gender:女
},{
id:2,
first_name:Marie,
last_name:Morris,
email:mmorris1@engadget.com,
gender:Female
},{
id:3,
first_name:Larry,
last_name:Wallace,
email:lwallace2 @ example.com,
gender:Male
}];

用户写入s,预期的结果是:

  let result = [{
id:1,
first_name:Jean,
last_name: Owens,
email:jowens0@google.ru,
gender:女
},{
id:2,
first_name:Marie,
last_name:Morris,
email:mmorris1@engadget.com,
gender:Female
$]

我可以这样使用过滤器函数:

  let = searchText =s; 
let result = data.filter(object => {
for(var object in object)){
if(object.hasOwnProperty(property)){
return object [ ] .toString()。toLowerCase()。indexOf(searchText)!== -1;
}
}
});

所以我想知道是否有更好的替代解决方案?

- 感谢KoolShams,这是一个可以工作的 JsFiddle



- for基准测试的目的(用2k数据测试)

解决方案您可以使用 Object.keys() some()来代替。

  let data = [{id:1,first_name:Jean,last_name:Owens,email:jowens0@google.ru :女性}},{id:2,first_name:Marie,last_name:Morris,email:mmorris1@engadget.com,gender {id:3,first_name:L arry,last_name:Wallace,email:lwallace2@example.com,gender:Male}]; var result = data.filter(function(o){return Object.keys o).some(function(k){return o [k] .toString()。toLowerCase()。indexOf('s')!= -1; })})console.log(result) 


I am really surprised I haven't been able to find anything related to my question. I am looking for a fast way to filter my array of objects based on a user text input.

Assume I have this array:

let data = [{
  "id": 1,
  "first_name": "Jean",
  "last_name": "Owens",
  "email": "jowens0@google.ru",
  "gender": "Female"
}, {
  "id": 2,
  "first_name": "Marie",
  "last_name": "Morris",
  "email": "mmorris1@engadget.com",
  "gender": "Female"
}, {
  "id": 3,
  "first_name": "Larry",
  "last_name": "Wallace",
  "email": "lwallace2@example.com",
  "gender": "Male"
}];

User writes "s", the expected result would be:

let result = [{
  "id": 1,
  "first_name": "Jean",
  "last_name": "Owens",
  "email": "jowens0@google.ru",
  "gender": "Female"
}, {
  "id": 2,
  "first_name": "Marie",
  "last_name": "Morris",
  "email": "mmorris1@engadget.com",
  "gender": "Female"
}]

I could use the filter function in such a way:

let = searchText = "s";
    let result = data.filter(object=>{
      for (var property in object) {
        if (object.hasOwnProperty(property)) {
          return object[property].toString().toLowerCase().indexOf(searchText) !== -1;
        }
      }
    });

So I am wondering if there are better alternatives to this solution?

--Here is a working JsFiddle thanks to KoolShams

--Plunker for benchmark purposes (tested with 2k data)

解决方案

You could use Object.keys() and some() instead.

let data = [{
  "id": 1,
  "first_name": "Jean",
  "last_name": "Owens",
  "email": "jowens0@google.ru",
  "gender": "Female"
}, {
  "id": 2,
  "first_name": "Marie",
  "last_name": "Morris",
  "email": "mmorris1@engadget.com",
  "gender": "Female"
}, {
  "id": 3,
  "first_name": "Larry",
  "last_name": "Wallace",
  "email": "lwallace2@example.com",
  "gender": "Male"
}];

var result = data.filter(function(o) {
  return Object.keys(o).some(function(k) {
    return o[k].toString().toLowerCase().indexOf('s') != -1;
  })
})

console.log(result)

这篇关于过滤所有属性值上的对象数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆