Duda javascript

raid

Hola, os paso un problemilla que tengo y que no consigo salirme:

Tengo un objeto con dos propiedades. Siempre son dos propiedades. Accedo a ellas:

variable1 = objeto.A;
variable2 = objeto.b;

Pero el problema es que algunas veces me encuentro que el objeto (es una librería externa) me ha cambiado los nombres de las propiedades, así que tengo que acceder con:

variable1 = objeto.e;
variable2 = objeto.G;

Había probado con algo así como:

variable1 = objeto.item[0];
variable2 = objeto.item[1];

Juraría que me llegó a funcionar, pero ahora no me funciona. Alguna idea de cómo acceder a esa estructura del objeto sin saber el nombre de sus propiedades?

Kiroushi

Aporta algún otro dato, lo que dices no me cuadra mucho.

¿Qué librería es? ¿En qué circunstancia te cambian las propiedades?

jalamoNNN

http://stackoverflow.com/questions/983267/access-the-first-property-of-an-object
La segunda respuesta quizás te ayude.

1 respuesta
S

No debes hacerlo, pero vamos:

var variable1 = objeto.A || objeto.e;

Pero no obstante tu problema es otro, que no das bastante información para resolver.

AkroS

Esa librería es google maps / places? hasta ahora es la única que conozco que el nombre de ciertas propiedades cambia de vez en cuando, pero si tienes ese problema es que estas haciendo un mal uso de la API. Mira los métodos públicos (getters) para obtener el valor de esas propiedades.

1 respuesta
raid

#3 Muchas gracias buen hombre. Es lo que necesitaba

Realmente lo que necesitaba es acceder a las propiedades de un objeto por su índice y no por su nombre.

No sé expresarme, sorry.

Solución:

var1 = objetoLibExterna[Object.keys(objetoLibExterna)[0]];
var2 = objetoLibExterna[Object.keys(objetoLibExterna)[1]];

#5 Hostia tío, has dado en el clavo. Es el geocoder de google maps.
No quise poner el nombre de la librería por no liar la troca aún más. Quería ir a un caso genérico.

Ya que estamos: Cuál sería el getter de obtener la longitud y latitud de un sitio dada la dirección en formato String?

Mi código:

function busquedaCalle(direccion){
    var address = direccion+", 08820 El Prat de Llobregat";
    console.log(address);
    // Creamos el Objeto Geocoder
    var geocoder = new google.maps.Geocoder();
    // Hacemos la petición indicando la dirección e invocamos la función
    // geocodeResult enviando todo el resultado obtenido
    geocoder.geocode({ 'address': address}, geocodeResult);
} 

function geocodeResult(results, status) {
    // Verificamos el status
    if (status == 'OK') {
        objLocation =results[0].geometry.location;
        console.log(objLocation);
        longitud= objLocation[Object.keys(objLocation)[0]];
        latitud = objLocation[Object.keys(objLocation)[1]];
        centrar(latitud,longitud,19); 
    } else {
        // En caso de no haber resultados o que haya ocurrido un error
        // lanzamos un mensaje con el error
        console.log("Geocoding no tuvo éxito debido a: " + status);
    }
}

Gracias.

1 respuesta
AkroS

#6 Creo recordar que es results[0].geometry.location.lat() y results[0].geometry.location.lng()
De todas formas puedes poner un debugger en ese punto y ver lo que tienen los objetos de geometry y location.

1 respuesta
raid

#7 Dioooos, que burro soy.
Ya lo he visto joderrrr

( no había desplegado el proto )

De hecho soy tan cutre que no sabía que ahí podría encontrar funciones para utilizar

Bueno, muchas gracias de verdad, aunque ahora me sienta como un .... yoquesé

Usuarios habituales