【发布时间】:2019-12-13 17:08:41
【问题描述】:
我想要做的是使用另一个对象过滤一个对象。我让它适用于名称或电子邮件等键,但问题在于它需要递归检查值的地址字段。
我有以下对象:
{
"id" : 1,
"name": "Michael",
"surname": "Smith",
"emailAddress": "m.smith@gmail.com",
},
{
"id": "2",
"name": "Sam",
"surname": "Smith",
"emailAddress": "s.smith@gmail.com",
"address": {
"text": "123 Fake Street, Some Place, United kingdom",
"street_number": "123",
"route": "Fake Street",
"locality": "Some Place",
"country": "UK",
"postcode": "HP18",
"lat": 51.648858999292999,
"lng": 4.08207329992999786,
}
},
{
"id": 3,
"name": "Josh",
"surname": "Fradley",
"emailAddress": "myemai@gmail.com",
"address": {
"text": "1 Apple Park Way, Cupertino, CA, USA",
"street_number": "1",
"route": "Apple Park Way",
"locality": "Cupertino",
"administrative_area_level_1": "California",
"country": "US",
"postcode": "95014",
"lat": 37.3346326,
"lng": -122.01268240000002,
}
}
]
示例搜索对象
{
"name": "",
"phone": "",
"address": "",
"emailAddress": "myemai@gmail.com"
}
我用于电子邮件和姓名字段的代码
let res = array.filter(o =>
Object.keys(searches).every(k =>
o[k] && o[k].length ? removeDiacritics(o[k].toLowerCase()).indexOf(removeDiacritics(searches[k].toLowerCase())) >= 0 : true
));
我正在苦苦挣扎的是如何搜索作为对象的地址键,例如,如果我搜索“地址”:“假街”,它应该返回 id 2
有什么建议吗?
编辑:我忘了说过滤器数组是动态的,所以我不能在“地址”中硬编码,我在这里用作一个对象的例子
【问题讨论】:
-
我认为你不需要递归。
-
你为什么不能像
array.filter(o => o.address && o.address.text && o.address.text.includes(searchString))这样的? -
是一个空字符串要搜索的值吗?
-
这些过滤器可以是动态的,因此“地址”的值可能会改变。我以这里为例
标签: javascript object filter