[英]Search Javascript Array of Objects
我正在尝试通过字符串过滤javascript对象数组。 但是我希望过滤器查看每个属性并对其进行测试,以查看字符串是否有效。 AngularJS有一个内置的过滤器可以做到这一点,但是我在SO上找不到任何解决方案。
[
{
"title":"Mr.",
"name":"John Smith",
"firstName":"John",
"lastName":"Smith"
},
{
"title":"Mr.",
"name":"Bill Smith",
"firstName":"Bill",
"lastName":"SMith"
}
]
因此,例如,如果我为文本字符串输入“ Jo”,它将带回索引0处的对象,如果您只想按单个属性进行搜索,这很容易做到。
现在,如果我输入“ Mr”,它应该带回索引0和索引1的两项,因为我们正在搜索所有属性。
希望这对我的要求有意义。
编辑:非常抱歉昨天晚上很晚,我在数据结构中省略了非常重要的细节。
{
"title":"Mr.",
"name":"John Smith",
"firstName":"John",
"lastName":"Smith",
"contactType":{
"name":"test"
},
"addresses":[
{"address":"Test Street One"},
{"address":"Test Street Two"},
]
},
{
"title":"Mr.",
"name":"Bill Smith",
"firstName":"Bill",
"lastName":"SMith",
"contactType":{
"name":"test"
},
"addresses":[
{"address":"Test Street One"},
{"address":"Test Street Two"},
]
}
因此,在这种情况下,搜索将考虑对象内任何类型和任意数量的嵌套对象。 对不起,忘记了这一部分。
您可以遍历数组的对象并使用indexof查找具有输入字符串的元素,
DEMO
var myarray =[ { "title":"Mr.", "name":"John Smith", "firstName":"John", "lastName":"Smith" }, { "title":"Mr.", "name":"Bill Smith", "firstName":"Bill", "lastName":"SMith" } ]; var toSearch = "Mr"; var results =[]; for(var i=0; i<myarray.length; i++) { for(key in myarray[i]) { if(myarray[i][key].indexOf(toSearch)!=-1) { results.push(myarray[i]); } } } console.log(results)
您可以结合使用Array#filter
和Object.values
来实现此目的:
let data = [{ "title": "Mr.", "name": "John Smith", "firstName": "John", "lastName": "Smith" }, { "title": "Mr.", "name": "Bill Smith", "firstName": "Bill", "lastName": "SMith" } ]; let string = 'Jo'; let results = data.filter(item => Object.values(item).some(value => value.includes(string))); console.log(results);
遍历每个对象的所有属性:
var items = [{ "title": "Mr.", "name": "John Smith", "firstName": "John", "lastName": "Smith" }, { "title": "Mr.", "name": "Bill Smith", "firstName": "Bill", "lastName": "SMith" }]; console.log("Jo :", items.filter(x => contains(x, "Jo")).map(x => x.name)); console.log("Mr :", items.filter(x => contains(x, "Mr")).map(x => x.name)); function contains (x, w) { for (let k in x) { if (x[k].indexOf(w) !== -1) { return true; } } return false; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.