entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Obtener propiedad de un objeto a partir de su valor

Hola, lo que trato de hacer es devolver el nombre de la propiedad de un objeto sabiendo su valor. Por ejemplo si tengo el siguiente objeto, a partir de Ferrari obtener marca.

auto = {marca: "Ferrari", color: "rojo", precio: 30}

Saludos.

1 Respuesta

1voto

Leonardo-Tadei Puntos227320

Hola Marcos,

no conozco ningún método directo para resolver la cuestión que plateás.

Lo que se me acurre que podrías hacer es relevar las propiedades de un objeto (no hace falta hacer introspección, porque todo en JavaScript es público) y luego recorrer las propiedades para ver cuál coincide con el valor.

Podría ser algo así:

function inspeccionar(obj) {
  var msg = new Array();
  for (var property in obj)   {
   if (typeof obj[property] == 'unknown') {
      msg[msg.length] = {'type' : 'unknown', 'name' : property, value : 'unknown'};
    } else {
      msg[msg.length] ={'type' : (typeof obj[property]), 'name' : property, 'value' : obj[property]};
    }
  }
  return msg;
}

function propiedadDe(obj, valor ) {
  var msg = new Array();
  for (var property in obj)   {
    res = 'no encontrado';
    if (obj[property] == valor) {
        res = property;
        return res;
    }
    return res;
  }
}

auto = {marca: "Ferrari", color: "rojo", precio: 30};
console.log(inspeccionar(auto));
console.log(propiedadDe(auto, 'Ferrari'));

Para más eficiencia se podría hacer una sola función que recorra las propiedades y devuelva el valor si lo encuentra, pero así es más genérico y puede servirte para más escenarios de uso.

Fijate que la función sale al encontrar el primer valor de concordancia, por lo que si tenés dos propiedades con el mismo valor, obtendrás como resultado la primera.

También podría ampliarse para que haga concordancia de tipo además de del valor, usando typeof() para comprar; esto dependerá de tus necesidades..

Saludos cordiales!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta