HOWTO · JavaScript
Obtener la clave de un objeto JavaScript
Este tutorial detalla cómo obtener la clave de un objeto en javascript.
En esta página
Usa Object.keys(obj) para obtener un array con los nombres de las propiedades de cadena propias y enumerables de un objeto. Usa Object.entries(obj) cuando necesites mantener cada clave junto con su valor. Ninguno de los dos métodos modifica el objeto. Para recorrer también propiedades enumerables heredadas, usa for...in y filtra las propiedades propias si tu tarea lo requiere.
Obtener las claves de un objeto con Object.keys()
Object.keys() devuelve un array con las claves de cadena propias y enumerables. Resulta útil cuando no conoces de antemano los nombres de las propiedades, por ejemplo, al procesar un registro devuelto por una API. El array contiene solo los nombres; para leer un valor, usa obj[key]. Si un objeto no tiene propiedades de cadena propias y enumerables, el resultado es un array vacío. Las propiedades de tipo símbolo no se incluyen.
El orden de las propiedades está definido, pero no siempre coincide con el orden en que se escribieron las claves. Las claves que son índices de array (cadenas que representan índices enteros canónicos de 0 a 4294967294) aparecen primero, en orden numérico ascendente. Después aparecen las demás claves de cadena, según el orden en que se crearon las propiedades. Una cadena como "01" no es un índice de array, así que queda entre las demás claves de cadena. Con los arrays ocurre lo mismo: Object.keys() devuelve como cadenas los índices presentes y enumerables; no devuelve los valores del array.
Ejecuta este ejemplo:
const record = { 4: 'pear', 2: 'mango', name: 'fruit', '01': 'label' };
const keys = Object.keys(record);
console.log(keys);
console.log(record[keys[0]]);
console.log(Object.keys(['red', 'blue']));
Este ejemplo muestra primero las claves que son índices numéricos, conserva "01" entre las claves de cadena comunes y usa una clave devuelta para buscar su valor. Obtener las claves no cambia el orden ni reescribe las propiedades de record.
Obtener claves y valores de un objeto con Object.entries()
Usa Object.entries(obj) cuando el siguiente paso necesite cada clave junto con su valor correspondiente. Devuelve un array de arrays de dos elementos con esta forma: [[key, value], ...]. Al igual que Object.keys(), solo incluye las propiedades de cadena propias y enumerables del objeto, sigue el mismo orden y excluye las propiedades de tipo símbolo. No recorre de forma recursiva los valores que resulten ser objetos.
La asignación por desestructuración facilita el procesamiento de cada par. El siguiente ejemplo completo muestra una etiqueta en inglés y el valor de cada propiedad; esa etiqueta permanece en inglés porque forma parte del bloque de código sin traducir:
const settings = { theme: 'dark', language: 'English' };
for (const [key, value] of Object.entries(settings)) {
console.log(`${key}: ${value}`);
}
Elige Object.keys() si solo necesitas los nombres y Object.entries() si el bucle necesita los nombres y sus valores juntos. Si ya conoces una clave, no hace falta enumerar el objeto: accede directamente al valor con settings.theme o settings['theme'].
Recorrer las claves de un objeto con for…in
Un bucle for...in recorre las propiedades de cadena enumerables. Puede incluir propiedades heredadas a través del prototipo del objeto, por lo que sus resultados pueden diferir de los de Object.keys(), que solo enumera propiedades propias. Si necesitas excluir las propiedades heredadas, usa Object.hasOwn(obj, key) dentro del bucle. Este método está disponible en las versiones modernas de JavaScript; en entornos más antiguos, usa Object.prototype.hasOwnProperty.call(obj, key).
const parent = { category: 'fruit' };
const item = Object.create(parent);
item.name = 'mango';
for (const key in item) {
if (Object.hasOwn(item, key)) {
console.log(`${key}: ${item[key]}`);
}
}
El bucle puede encontrar tanto name como la propiedad heredada category, mientras que la comprobación de propiedad propia muestra solo name. Si quieres todas las propiedades enumerables, omite esa comprobación. Para obtener una lista predecible de las claves de cadena propias y enumerables de un objeto, Object.keys() suele ser la opción más clara.
La enumeración es superficial. Si una propiedad de primer nivel contiene otro objeto, la lista de claves incluye el nombre de esa propiedad y su valor sigue siendo el objeto anidado. Para enumerar sus claves, llama a Object.keys() sobre ese valor por separado; el recorrido recursivo requiere lógica adicional para visitar cada objeto anidado. Elige entre estos tres enfoques según las propiedades que necesites: Object.keys() para obtener nombres, Object.entries() para obtener pares de nombres y valores, y for...in para recorrer propiedades enumerables de toda la cadena de prototipos.