2011-11-29 17 views
8

currenty को निकालने के लिए, मैं देश, पोस्टल कोड, इलाके और उप-क्षेत्र पाने के लिए निम्नलिखित कोड का उपयोग कर रहा:अधिक कारगर तरीका पता घटकों

var country, postal_code, locality, sublocality; 
for (i = 0; i < results[0].address_components.length; ++i) 
{ 
    for (j = 0; j < results[0].address_components[i].types.length; ++j) 
    { 
     if (!country && results[0].address_components[i].types[j] == "country") 
      country = results[0].address_components[i].long_name; 
     else if (!postal_code && results[0].address_components[i].types[j] == "postal_code") 
      postal_code = results[0].address_components[i].long_name; 
     else if (!locality && results[0].address_components[i].types[j] == "locality") 
      locality = results[0].address_components[i].long_name; 
     else if (!sublocality && results[0].address_components[i].types[j] == "sublocality") 
      sublocality = results[0].address_components[i].long_name; 
    } 
} 

कि असंतोषजनक है। क्या एक ही परिणाम प्राप्त करने का कोई और तरीका है?

+0

बहुत बेवकूफ है कि गूगल कि :( –

उत्तर

0
if (typeof Object.keys == 'function') 
    var length = function(x) { return Object.keys(x).length; }; 
else 
    var length = function() {}; 

var location = {};  
for (i = 0; i < results[0].address_components.length; ++i) 
{ 
    var component = results[0].address_components[i]; 
    if (!location.country && component.types.indexOf("country") > -1) 
     location.country = component.long_name; 
    else if (!location.postal_code && component.types.indexOf("postal_code") > -1) 
     location.postal_code = component.long_name; 
    else if (location.locality && component.types.indexOf("locality") > -1) 
     location.locality = component.long_name; 
    else if (location.sublocality && component.types.indexOf("sublocality") > -1) 
     location.sublocality = component.long_name; 

    // nothing will happen here if `Object.keys` isn't supported! 
    if (length(location) == 4) 
     break; 
} 

यह मेरे लिए सबसे उपयुक्त समाधान है। यह किसी की भी मदद कर सकता है।

7

आप

var country, postal_code, locality, sublocality; 
for (i = 0; i < results[0].address_components.length; ++i) { 
    var component = results[0].address_components[i]; 
    if (!sublocality && component.types.indexOf("sublocality") > -1) 
     sublocality = component.long_name; 
    else if (!locality && component.types.indexOf("locality") > -1) 
     locality = component.long_name; 
    else if (!postal_code && component.types.indexOf("postal_code") > -1) 
     postal_code = component.long_name; 
    else if (!country && component.types.indexOf("country") > -1) 
     country = component.long_name; 
} 

करने के लिए इसे छोटा कर सकते हैं या आप एक बेहतर स्वरूपित परिणाम प्राप्त करने की कोशिश कर रहे हैं? फिर कृपया हमें अपनी क्वेरी दिखाएं।

+0

नहीं, मैं बस विशिष्ट घटकों की जरूरत है जैसे कि यह बनाया का उपयोग करना। – 0xbadf00d

+0

क्या मुझे यह जांचने की भी आवश्यकता है कि चर अपरिभाषित हैं या नहीं? दूसरे शब्दों के साथ: क्या यह संभव है कि एक ही परिणाम में बराबर प्रकार के साथ कई घटक हैं? – 0xbadf00d

+0

मुझे नहीं पता कि यह होता है या नहीं, लेकिन झूठी मानों की जांच करने से हमें पहले से ही पाए गए प्रकारों की खोज करने से बचाया जाता है और इसलिए थोड़ा सा तेज़ होना चाहिए। – Bergi

17

आप निम्न समारोह इस्तेमाल कर सकते हैं किसी भी पते घटक को निकालने के लिए:

function extractFromAdress(components, type){ 
    for (var i=0; i<components.length; i++) 
     for (var j=0; j<components[i].types.length; j++) 
      if (components[i].types[j]==type) return components[i].long_name; 
    return ""; 
} 

जानकारी आप कॉल निकालने के लिए:

var postCode = extractFromAdress(results[0].address_components, "postal_code"); 
var street = extractFromAdress(results[0].address_components, "route"); 
var town = extractFromAdress(results[0].address_components, "locality"); 
var country = extractFromAdress(results[0].address_components, "country"); 

आदि ...

3

मैं इसे इस तरह से किया था :

placeParser = function(place){ 
    result = {}; 
    for(var i = 0; i < place.address_components.length; i++){ 
    ac = place.address_components[i]; 
    result[ac.types[0]] = ac.long_name; 
    } 
    return result; 
}; 

तो मैं सिर्फ

parsed = placeParser(place) 
parsed.route 
0

Underscore.js का उपयोग कर आगंतुकों का उपयोग आसानी से एक वस्तु शाब्दिक में geocode जवाब में address_components सरणी में बदल सकते हैं:

var obj = _.object( 
    _.map(results[0].address_components, function(c){ 
     return [c.types[0], c.short_name] 
    }) 
); 
4

मेरे एक लाइनर एक कार्यात्मक दृष्टिकोण और map का उपयोग कर, filter, और ES2015:

/** 
* Get the value for a given key in address_components 
* 
* @param {Array} components address_components returned from Google maps autocomplete 
* @param type key for desired address component 
* @returns {String} value, if found, for given type (key) 
*/ 
function extractFromAddress(components, type) { 
    return components.filter((component) => component.types.indexOf(type) === 0).map((item) => item.long_name).pop() || null; 
} 

उपयोग:

const place = autocomplete.getPlace(); 
const address_components = place["address_components"] || []; 

const postal_code = extractFromAddress("postal_code"); 
+0

यह शानदार है। बहुत ही प्रभावी –

1

मुझे सच में विश्वास है कि user1429980 ऊपर उत्तर अधिक मान्यता के योग्य है। यह वास्तव में अच्छी तरह से काम करता है। मेरा जवाब उनके कार्य पर आधारित है।

//searches object for a given key and returns the key's value

extractFromObject (object, key) { return object.filter((object) => component.types.indexOf(key) === 0).map((item)=>item.long_name).pop() || null; }


उदाहरण 1:: मैं प्रदान की कोड user1429980 का उपयोग कर JSON ऑब्जेक्ट खोज करने के लिए कैसे कुछ उदाहरण जोड़ दिया है बेहतर वर्णन करने के लिए देशांतर के साथ गूगल के reverseGeocode एपीआई और अक्षांश 43.6532,79 पर सेट है।3832 (टोरंटो, ओंटारियो, कनाडा):

var jsonData = {} //object contains data returned from reverseGeocode API

var city = extractFromObject(jsonData.json.results[0].address_components, 'locality');

console.log(city); //Output is Toronto


उदाहरण 2: ChIJE9on3F3HwoAR9AhGJW_fL I (लॉस एंजिल्स, CA के लिए जगह आईडी सेट के साथ गूगल के स्थल API , यूएसए):

var jsonData = {} //object contains data returned from Google's Places API

var city = extractFromObject(jsonData.json.result.address_components, 'locality');

console.log(city); //Output is Los Angeles

1

lodash

const result = _.chain(json.results[0].address_components) 
    .keyBy('types[0]') 
    .mapValues('short_name') 
    .value() 
संबंधित मुद्दे