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数据测试)
你可以使用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)