2016-02-04 97 views
0

這是一個腦筋急轉彎,所以我使用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_numberroute。我想要做的是獲得對象的short_name(或long_name),其中type包含street_numberroute等等,並且能夠將它們設置爲變量或以某種其他方式使用它們。

我已經嘗試了幾個地址,它以大致相同的順序返回它們,但是有時在該數組中有一個或多個項目,因此它並不總是以完全相同的順序返回相同數量的項目。因此,不要試圖查看索引,並希望這是我期望的正確值,我希望根據type的說法得到這些值。

我使用的是ember.js,所以如果有一個計算屬性的方式可能做到這一點很酷,但我打開使用JavaScript/jQuery函數來做到這一點。

+0

應該怎麼可能結果是什麼樣子? –

回答

3

你可以寫一個函數

function getAdress(what, obj) { 
    return obj.address_components.filter(function(item) { 
     return item.types.indexOf(what) !== -1; 
    }).shift(); 
} 

,當你需要找到一些使用它

getAdress('street_number', obj).short_name 

FIDDLE

+0

不錯的答案@ adeneo。但是shift()是做什麼的? – sfletche

+0

@sfletche - 因爲它正在過濾一個數組,所以'shift'移出該數組中的第一個匹配。根據OP的代碼,反正只會有一場比賽。 – adeneo

+0

根據文檔,「shift()方法從數組中移除第一個元素並返回該元素。」來源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift。基本上,@adeneo正在使用OP的JSON在該字段上只有一個匹配來返回它的事實(正如他上面所解釋的)。做得好。 –