根据该密钥中的数值查找密钥的值
这是一个脑筋急转弯,所以我使用places API(使用ember.js的插件,所以我真的不能控制该版本,除非我想写我自己),并返回我的数据,看起来像这样根据该密钥中的数值查找密钥的值
{
"address_components": [
{
"long_name": "1235",
"short_name": "1235",
"types": [
"street_number"
]
},
{
"long_name": "Long Point Road",
"short_name": "Long Point Rd",
"types": [
"route"
]
},
{
"long_name": "Mount Pleasant",
"short_name": "Mt Pleasant",
"types": [
"locality",
"political"
]
},
{
"long_name": "Charleston County",
"short_name": "Charleston County",
"types": [
"administrative_area_level_2",
"political"
]
},
{
"long_name": "South Carolina",
"short_name": "SC",
"types": [
"administrative_area_level_1",
"political"
]
},
{
"long_name": "United States",
"short_name": "US",
"types": [
"country",
"political"
]
},
{
"long_name": "29464",
"short_name": "29464",
"types": [
"postal_code"
]
},
{
"long_name": "9020",
"short_name": "9020",
"types": [
"postal_code_suffix"
]
}
],
"adr_address": "<span class=\"street-address\">1235 Long Point Rd</span>, <span class=\"locality\">Mt Pleasant</span>, <span class=\"region\">SC</span> <span class=\"postal-code\">29464-9020</span>, <span class=\"country-name\">USA</span>",
"formatted_address": "1235 Long Point Rd, Mt Pleasant, SC 29464, USA",
"geometry": {
"location": {
"lat": 32.8570647,
"lng": -79.8224902
}
},
"icon": "https://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png",
"id": "f3d33a1a65adc47f7fcf927bb7b18ea91a59fb81",
"name": "1235 Long Point Rd",
"place_id": "ChIJkVjE8_5t_ogRvHeqOGZ6cB0",
"reference": "CpQBjAAAAJEVbHvc6lTEXUvlKHc-wTI3f8g8U6W7i6oARvPyP_2TWTNE7IJQQHTABvbxTtMK6cFxRaksi2xaT7lcQiRB-nv7co7BVzfUMrwqr0YFQZvbLH_OGflPlO---vX4GPTQlDnFinnnixHW7LcRGbPJ4jfgnQ3HnURUCUmCa0WrLTIxiuqEwzIljAGv9K_iUMU9nBIQE57UebJ0CfCs9y0MBBvGeRoUUovGUbFYmgCnPOKVlXhrLQaE5uY",
"scope": "GOOGLE",
"types": [
"street_address"
],
"url": "https://maps.google.com/?q=1235+Long+Point+Rd,+Mt+Pleasant,+SC+29464,+USA&ftid=0x88fe6dfef3c45891:0x1d707a6638aa77bc",
"vicinity": "Mount Pleasant",
"html_attributions": []
}
所以你可以看到每个对象都有值types
关键,涉及到他们是什么类型的对象address_components
部分,例如如street_number
或route
。我想要做的是获得对象的short_name
(或long_name
),其中type
包含street_number
或route
等等,并且能够将它们设置为变量或以某种其他方式使用它们。
我已经尝试了几个地址,它以大致相同的顺序返回它们,但是有时在该数组中有一个或多个项目,因此它并不总是以完全相同的顺序返回相同数量的项目。因此,不要试图查看索引,并希望这是我期望的正确值,我希望根据type
的说法得到这些值。
我使用的是ember.js,所以如果有一个计算属性的方式可能做到这一点很酷,但我打开使用JavaScript/jQuery函数来做到这一点。
你可以写一个函数
function getAdress(what, obj) {
return obj.address_components.filter(function(item) {
return item.types.indexOf(what) !== -1;
}).shift();
}
,当你需要找到一些使用它
getAdress('street_number', obj).short_name
不错的答案@ adeneo。但是shift()是做什么的? – sfletche
@sfletche - 因为它正在过滤一个数组,所以'shift'移出该数组中的第一个匹配。根据OP的代码,反正只会有一场比赛。 – adeneo
根据文档,“shift()方法从数组中移除第一个元素并返回该元素。”来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift。基本上,@adeneo正在使用OP的JSON在该字段上只有一个匹配来返回它的事实(正如他上面所解释的)。做得好。 –
应该怎么可能结果是什么样子? –