根据所有属性值过滤对象数组
问题描述:
我真的很惊讶我找不到与我的问题相关的任何内容.我正在寻找一种快速的方法来根据用户文本输入过滤我的对象数组.
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.
假设我有这个数组:
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"
}];
用户写s",预期结果是:
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?
--感谢 KoolShams,这是一个有效的 JsFiddle
--Here is a working JsFiddle thanks to KoolShams
--Plunker 用于基准测试(使用 2k 数据测试)
--Plunker for benchmark purposes (tested with 2k data)
答
你可以使用 Object.keys()
和 some()
代替.
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)