Cómo obtener la clave de un objeto JavaScript clave/valor

4 minutos de lectura

avatar de usuario de sprugman
sprugman

Si tengo un objeto JS como:

var foo = { 'bar' : 'baz' }

si yo se eso foo tiene esa estructura básica de clave/valor, pero no sé el nombre de la clave, ¿cómo puedo obtenerla? for ... in? $.each()?

  • ¿Qué tiene de malo para… en?

    – Mate

    7 de junio de 2011 a las 16:48

  • Se siente indirecto y tienes que usar hasOwnProperty. Supongo que haré una función de biblioteca que lo haga….

    – sprugman

    7 de junio de 2011 a las 17:08

Avatar de usuario de Michael Benin
Michael Benín

Iterarás dentro del objeto con un bucle for:

for(var i in foo){
  alert(i); // alerts key
  alert(foo[i]); //alerts key's value
}

O

Object.keys(foo)
  .forEach(function eachKey(key) { 
    alert(key); // alerts key 
    alert(foo[key]); // alerts value
  });

  • ¿Qué pasa si no quiero?foo[i]ser – estar"_proto_"?

    – usuario2284570

    29 de mayo de 2016 a las 2:04

  • desarrollador.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

    – Michael Benín

    30 mayo 2016 a las 19:22

  • ¿Qué sucede si no quiero alertar()?foo[i]siiessome string?

    – usuario2284570

    30 mayo 2016 a las 21:47


  • @ user2284570: puedo ser una cadena, no hay problema.

    – ESP32

    21/09/2016 a las 18:46

  • ¿No te refieres a (var i en Object.keys (foo)) {

    – jack samurái

    17 de diciembre de 2016 a las 2:48

Puede acceder a cada clave individualmente sin iterar como en:

var obj = { first: 'someVal', second: 'otherVal' };
alert(Object.keys(obj)[0]); // returns first
alert(Object.keys(obj)[1]); // returns second

  • Ahora puede usar el operador de propagación para este propósito, se ve mejor: const [firstKey, ...rest] = Object.keys(obj);

    – Nerlín

    13 de diciembre de 2017 a las 21:08


Si desea obtener todas las claves, ECMAScript 5 introducido Object.keys. Esto solo es compatible con los navegadores más nuevos, pero el Documentación MDC proporciona una implementación alternativa (que también utiliza for...in por cierto):

if(!Object.keys) Object.keys = function(o){
     if (o !== Object(o))
          throw new TypeError('Object.keys called on non-object');
     var ret=[],p;
     for(p in o) if(Object.prototype.hasOwnProperty.call(o,p)) ret.push(p);
     return ret;
}

Por supuesto, si desea tanto la clave como el valor, entonces for...in es la única solución razonable.

  • p me da la clave, pero ¿cómo obtengo el valor de la clave? Gracias.

    – Si8

    22 de noviembre de 2017 a las 17:24

  • Tanto para claves como para valores, use el nuevo Object.entries() desarrollador.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

    – Kzqai

    7 junio 2019 a las 16:35

  • tal vez sea una indicación de mi comprensión limitada, pero esta respuesta parece increíblemente detallada (ciertamente reutilizable) para algo tan simple como obtener una clave/valor. ¿No debería marcarse la respuesta de @Michael Benin como la mejor?

    – Aarón Matthews

    2 de agosto de 2019 a las 9:28

  • Erm… ¿alguien más que hace clic en el primer enlace es redirigido a Narcóticos Anónimos?

    – John Duskin

    27 de agosto de 2019 a las 14:45

Dado su objeto:

var foo = { 'bar' : 'baz' }

Llegar barusar:

Object.keys(foo)[0]

Llegar bazusar:

foo[Object.keys(foo)[0]]

Suponiendo un solo objeto

Avatar de usuario de Mustkeem K
imprescindible k

Esta es la forma más sencilla y fácil. Así es como hacemos esto.

var obj = { 'bar' : 'baz' }
var key = Object.keys(obj)[0];
var value = obj[key];
     
 console.log("key = ", key) // bar
 console.log("value = ", value) // baz

Object.keys() es un método de javascript que devuelve una matriz de claves cuando se usa en objetos.

Object.keys(obj) // ['bar']

Ahora puede iterar sobre los objetos y puede acceder a valores como los siguientes:

Object.keys(obj).forEach( function(key) {
  console.log(obj[key]) // baz
})

  • puede obtener TypeError si espera que una clave sea un número. Porque las claves son siempre cadenas.

    – Verde

    13 mayo 2020 a las 18:02

  • @Green, ¿por qué esperarías que una clave fuera un número?

    – Cualquiera

    22 de julio a las 6:24

avatar de usuario de theonelucas
lucas

A un trazador de líneas para ti:

const OBJECT = {
    'key1': 'value1',
    'key2': 'value2',
    'key3': 'value3',
    'key4': 'value4'
};

const value="value2";

const key = Object.keys(OBJECT)[Object.values(OBJECT).indexOf(value)];

window.console.log(key); // = key2

  • puede obtener TypeError si espera que una clave sea un número. Porque las claves son siempre cadenas.

    – Verde

    13 mayo 2020 a las 18:02

  • @Green, ¿por qué esperarías que una clave fuera un número?

    – Cualquiera

    22 de julio a las 6:24

avatar de usuario de aiffin
aiffin

// iterate through key-value gracefully
const obj = { a: 5, b: 7, c: 9 };
for (const [key, value] of Object.entries(obj)) {
  console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
}

Referir MDN

  • Respuesta muy subestimada. También puede utilizar el enfoque funcional, Object.entries(object1).forEach(([key, value]) => { console.log(`${key}: ${value}`); })

    – brandonscript

    2 ene a las 23:39

¿Ha sido útil esta solución?