[英]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.