[英]Given an array of JSON objects, how can I get JSON object X based on a nested value?
我正在使用google maps地理编码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);
演示: http : //jsfiddle.net/upzjth30/
如果您想使用下划线,这是一个解决方案,它将向您展示如何使用其下划线来获得您想要的结果
这将查找具有“位置”类型的第一个组件
var result = _.chain(json.results)
.pluck('address_components')
.flatten()
.find(function(component) {
return _.contains(component.types, 'locality');
})
.pick('long_name', 'short_name')
.value()
for (var i = 0; i < data.results[0].address_components.length; i++) {
alert(data.results[0].address_components[i].short_name);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.