过滤所有属性值上的对象数组

Yan*_*eau 5 javascript arrays filter

我真的很惊讶我找不到与我的问题相关的任何内容.我正在寻找一种基于用户文本输入过滤我的对象数组的快速方法.

假设我有这个数组:

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"
}];
Run Code Online (Sandbox Code Playgroud)

用户写"s",预期结果为:

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"
}]
Run Code Online (Sandbox Code Playgroud)

我可以这样使用过滤功能:

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;
        }
      }
    });
Run Code Online (Sandbox Code Playgroud)

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

- 感谢KoolShams,这是一个有效的JsFiddle

- 用于基准测试的Plunker(使用2k数据测试)

Nen*_*car 7

你可以使用Object.keys()some()不是.

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)
Run Code Online (Sandbox Code Playgroud)