我正在使用google maps geocoding api根据地址获取以下 JSON 对象:
{
"results":[
{
"address_components":[
{
"long_name":"643",
"short_name":"643",
"types":[
"subpremise"
]
},
{
"long_name":"900",
"short_name":"900",
"types":[
"street_number"
]
},
{
"long_name":"Folsom Street",
"short_name":"Folsom St",
"types":[
"route"
]
},
{
"long_name":"South of Market",
"short_name":"South of Market",
"types":[
"neighborhood",
"political"
]
},
{
"long_name":"San Francisco",
"short_name":"SF",
"types":[
"locality",
"political"
]
},
{
"long_name":"San Francisco County",
"short_name":"San Francisco County",
"types":[
"administrative_area_level_2",
"political"
]
},
{
"long_name":"California",
"short_name":"CA",
"types":[
"administrative_area_level_1",
"political"
]
},
{
"long_name":"United States",
"short_name":"US",
"types":[
"country",
"political"
]
},
{
"long_name":"94107",
"short_name":"94107",
"types":[
"postal_code"
]
},
{
"long_name":"1007",
"short_name":"1007",
"types":[
"postal_code_suffix"
]
}
]
}
]
}
问题
如何获得long_name
和short_name
address_components
中的一个对象基于特定类型的数组?
示例
我想要long_name
和 short_name
那些具有 "locality"
的对象在他们的 types
数组。
上下文
我正在使用此信息使用 Node.js、express 和 mongodb 构建一个“公寓查找器”应用程序。
注意事项
我读到下划线库对此很有用。
编辑:我的想法
所以,我知道如何搜索 address_components
大批。 (我可以通过 results[0]
访问它),并且我相信我可以访问 types
按点表示法数组,但我想搜索所有 types
每个对象的数组,当我找到一个对象时返回,比如说 types
包含“位置”。我怎样才能做到这一点?
我在解析/循环 JSON 方面没有那么丰富的经验。我在学习。任何帮助是极大的赞赏。谢谢!
最佳答案
您可以使用嵌套的 .filter
来获取包含该过滤器的对象,并结合 .map
创建匹配对象的数组:
var objectsContainingConditions = data.results[0].address_components.filter(function(item) {
return item.types.filter(function(addressType) {
return addressType == "locality";
}).length > 0;
}).map(function(item) {
return {
long: item.long_name,
short: item.short_name
}
});
如果您想重用它,请将其放入函数并传递类型:
function queryGoogleComponentsByType(type, components) {
return components.filter(function(item) {
return item.types.filter(function(addressType) {
return addressType == type;
}).length > 0;
}).map(function(item) {
return {
long: item.long_name,
short: item.short_name
}
});
}
var results = queryGoogleComponentsByType("locality", data.results[0].address_components);
关于javascript - 给定一个 JSON 对象数组,如何根据嵌套值获取 JSON 对象 X?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30178497/