Estoy usando Google Maps para devolver el nombre de la ubicación y el estado del lugar donde se encuentre el usuario es. Esta es la parte que me interesa:

"address_components" : [
        {
           "long_name" : "Salem",
           "short_name" : "Salem",
           "types" : [ "locality", "political" ]
        },
        {
           "long_name" : "Rockingham",
           "short_name" : "Rockingham",
           "types" : [ "administrative_area_level_2", "political" ]
        },
        {
           "long_name" : "New Hampshire",
           "short_name" : "NH",
           "types" : [ "administrative_area_level_1", "political" ]
        },
        {
           "long_name" : "United States",
           "short_name" : "US",
           "types" : [ "country", "political" ]
        }
     ]

Hay una manera de encontrar los objetos que contienen la «localidad» y «administrative_area_level_1» valor y retorno de la «long_name» cadena del objeto apropiado el uso de JavaScript o jQuery? ¿Cómo puedo hacerlo?

  • posibles duplicados de Cómo buscar JSON árbol con jQuery
  • compruebe si el objeto seleccionado tiene una matriz que contiene la cadena «localidad o administrative_area_level_1»..
  • ¿cómo puedo hacer eso?
  • Comprobar mi respuesta a continuación

4 Comentarios

  1. 3

    Hay que ir. Por favor, encontrar el violín aquí

    Mediante el uso de una función como la siguiente:

    function getLocality(){
        for(var i = 0 ; i< address_components.length; i++){
            var obj = address_components[i];
            var arr = obj["types"];
            for(var j = 0; j<arr.length;j++ ){
                if(arr[j] == "locality"){
                    return obj;
                }
            }
    
        }
    }

    O, más bien, la escritura de la Matriz prototipo que hace la misma

    Array.prototype.getByType = function(type){
        for(var i = 0 ; i< address_components.length; i++){
            var obj = address_components[i];
            var arr = obj["types"];
            for(var j = 0; j<arr.length;j++ ){
                if(arr[j] == type){
                    return obj;
                }
            }
    
        }
    }

    Y Utilizando el Prototipo de la siguiente manera:

    address_components.getByType("administrative_area_level_1").long_name //Note that you pass the type to the prototype function that does the job for you

    donde address_components es la Matriz devuelta por el Google Maps

    • Por supuesto que usted envíe la matriz a la que se analiza el valor. Por lo tanto, si r valor de retorno está dentro de un objeto de datos como var data = {} y guardar el valor de retorno como data = {"address_components" : [{...}]} luego de pasar de la data["address_components"].getById..
  2. 2

    Lugar de contaminantes en el código, puede utilizar esta JS lib; DefiantJS ( http://defiantjs.com ), que se extiende el objeto global JSON con el método de «búsqueda». Este método permite la búsqueda de una estructura JSON con XPath la sintaxis de la consulta. El resultado es que el código se convierte en mucho más limpio y legible.

    Aquí es el trabajo de violín;

    http://jsfiddle.net/hbi99/SjvZ9/

    var data = {
           ...
        },
        res = JSON.search( data, '//*[types="administrative_area_level_1" or types="locality"]' ),
        str = '';
    
        for (var i=0; i<res.length; i++) {
            str += res[i].long_name +'<br/>';
        }
    
        document.getElementById('output').innerHTML = str;

    No familiarizado con XPath? Echa un vistazo a este Evaluador de XPath para dar una idea de lo fácil que es;
    http://www.defiantjs.com/#xpath_evaluator

  3. 1

    Intente esto:

    var data = {"address_components" : [
            {
               "long_name" : "Salem",
               "short_name" : "Salem",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Rockingham",
               "short_name" : "Rockingham",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "New Hampshire",
               "short_name" : "NH",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            }
    ]};
    for(var i = 0; i < data.address_components.length; i++){
        if(data[i].long_name == 'something'){
          //do something
        }
        //or
        if(data[i].types[0] == 'administrative_area_level_1'){
          //do something
        }
    }
  4. 1

    Probar este,

    var addr_comp = [{"long_name": "Salem","short_name": "Salem","types": ["locality", "political"]}, {"long_name": "Rockingham","short_name": "Rockingham","types": ["administrative_area_level_2", "political"]}, {"long_name": "New Hampshire","short_name": "NH","types": ["administrative_area_level_1", "political"]}, {"long_name": "United States","short_name": "US","types": ["country", "political"]}];
    function getlocalityAdminLevel(addrType){
        for(var a=0,len=addr_comp.length;a<len;a++){
            ac=addr_comp[a];
            if(ac.types){
                for (var t = 0, tl = ac.types.length; t < tl; t++) {
                    ty = ac.types[t];
                    if (ty == addrType) {
                        return ac;break;
                    } 
                }
            }
        }
    }
    console.log(getlocalityAdminLevel('locality'));
    console.log(getlocalityAdminLevel('administrative_area_level_1'));

    Demo

    Usted puede conseguir long_name y short_name usándola como,

    locality=getlocalityAdminLevel('locality');
    if(locality && locality.long_name){
        alert(locality.long_name);
    }

    Demo 1

Dejar respuesta

Please enter your comment!
Please enter your name here