过滤所有属性值上的对象数组 [英] Filter array of objects on all properties value
本文介绍了过滤所有属性值上的对象数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设我有这个数组:
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
解决方案您可以使用
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屋!
查看全文