我有一个复杂的数据结构,带有嵌套数组,我需要使用不区分大小写的搜索来查找具有字符串值的元素。
由于执行嵌套查询的简单语法,我已经开始使用 lodash - 它工作得很好,但搜索区分大小写。
我想找到一个“address_components”元素,其“types”值为“route”,“long_name”值等于名为“targetStreet”的参数。
这是我目前拥有的 lodash 代码:
var result = _.find(geocodeResult,
{
'address_components': [
{
types: ['route'],
'long_name': targetStreet
}
]
});
问题: 如何使“long_name”属性的匹配不区分大小写?
下面是“geocodeResult”数据结构的示例(它实际上是一个 Google Geocoding Result 对象)。
请注意,此数据结构是动态的…Google 将尽可能返回最具体的结果,但如果找不到街道的匹配项,则不会返回街道组件,例如“address_components”中的“types”数组具有不确定的值。
[
{
"address_components": [
{
"long_name": "V&a Lane",
"short_name": "V&a Ln",
"types": [
"route"
]
},
{
"long_name": "Coonawarra",
"short_name": "Coonawarra",
"types": [
"locality",
"political"
]
},
{
"long_name": "Wattle Range Council",
"short_name": "Wattle Range",
"types": [
"administrative_area_level_2",
"political"
]
},
{
"long_name": "South Australia",
"short_name": "SA",
"types": [
"administrative_area_level_1",
"political"
]
},
{
"long_name": "Australia",
"short_name": "AU",
"types": [
"country",
"political"
]
},
{
"long_name": "5263",
"short_name": "5263",
"types": [
"postal_code"
]
}
],
"formatted_address": "V&a Ln, Coonawarra SA 5263, Australia",
"geometry": {
"bounds": {
"south": -37.3238134,
"west": 140.8154452,
"north": -37.3228868,
"east": 140.97295129999998
},
"location": {
"lat": -37.3233904,
"lng": 140.89510410000003
},
"location_type": "GEOMETRIC_CENTER",
"viewport": {
"south": -37.3246990802915,
"west": 140.8154452,
"north": -37.3220011197085,
"east": 140.97295129999998
}
},
"partial_match": true,
"place_id": "EiVWJmEgTG4sIENvb25hd2FycmEgU0EgNTI2MywgQXVzdHJhbGlh",
"types": [
"route"
]
},
{
"address_components": [
{
"long_name": "V&a Lane",
"short_name": "V&a Ln",
"types": [
"route"
]
},
{
"long_name": "Coonawarra",
"short_name": "Coonawarra",
"types": [
"locality",
"political"
]
},
{
"long_name": "Wattle Range Council",
"short_name": "Wattle Range",
"types": [
"administrative_area_level_2",
"political"
]
},
{
"long_name": "South Australia",
"short_name": "SA",
"types": [
"administrative_area_level_1",
"political"
]
},
{
"long_name": "Australia",
"short_name": "AU",
"types": [
"country",
"political"
]
},
{
"long_name": "5263",
"short_name": "5263",
"types": [
"postal_code"
]
}
],
"formatted_address": "V&a Ln, Coonawarra SA 5263, Australia",
"geometry": {
"bounds": {
"south": -37.3238134,
"west": 140.8154452,
"north": -37.3228868,
"east": 140.97295129999998
},
"location": {
"lat": -37.3233904,
"lng": 140.89510410000003
},
"location_type": "GEOMETRIC_CENTER",
"viewport": {
"south": -37.3246990802915,
"west": 140.8154452,
"north": -37.3220011197085,
"east": 140.97295129999998
}
},
"partial_match": true,
"place_id": "EiVWJmEgTG4sIENvb25hd2FycmEgU0EgNTI2MywgQXVzdHJhbGlh",
"types": [
"route"
]
}
]
原文由 JTech 发布,翻译遵循 CC BY-SA 4.0 许可协议
您使用的方式
lodash.find
对应于lodash.match
速记( https://lodash.com/docs/4.17.4#find ),不幸的是你不能通过正则表达式或函数来获取在您的对象属性中进行不敏感的搜索。你必须写类似的东西来执行搜索(假设
targetStreet
小写):您也可以在不使用
lodash
的情况下编写它,使用 ES6 语法 + Array.prototype.find 和 Array.prototype.includes (对于最新的浏览器)