¿Cómo recorro o enumero un objeto JavaScript?

Resuelto Tanmoy asked hace 15 años • 48 respuestas

Tengo un objeto JavaScript como el siguiente:

var p = {
    "p1": "value1",
    "p2": "value2",
    "p3": "value3"
};

¿ Cómo recorro todos los pelementos de ( p1,, ...) y obtengo sus claves y valores?p2p3

Tanmoy avatar Mar 26 '09 13:03 Tanmoy
Aceptado

Puede utilizar el for-inbucle como lo muestran otros. Sin embargo, también debe asegurarse de que la clave que obtenga sea una propiedad real de un objeto y no provenga del prototipo.

Aquí está el fragmento:

var p = {
    "p1": "value1",
    "p2": "value2",
    "p3": "value3"
};

for (var key in p) {
    if (p.hasOwnProperty(key)) {
        console.log(key + " -> " + p[key]);
    }
}
Expandir fragmento

Alternativa for-of con Object.keys():

var p = {
    0: "value1",
    "b": "value2",
    key: "value3"
};

for (var key of Object.keys(p)) {
    console.log(key + " -> " + p[key])
}
Expandir fragmento

Observe el uso de for-ofen lugar de for-in, si no se usa, devolverá undefinido en las propiedades nombradas y Object.keys()garantiza el uso solo de las propiedades propias del objeto sin todas las propiedades de la cadena de prototipos.

Usando el nuevo Object.entries()método:

Nota: Este método no es compatible de forma nativa con Internet Explorer. Puede considerar utilizar Polyfill para navegadores más antiguos.

const p = {
    "p1": "value1",
    "p2": "value2",
    "p3": "value3"
};

for (const [key, value] of Object.entries(p)) {
  console.log(`${key}: ${value}`);
}
levik avatar Mar 26 '2009 06:03 levik

En ECMAScript 5, puede combinar Object.keys()y Array.prototype.forEach():

var obj = { first: "John", last: "Doe" };

Object.keys(obj).forEach(function(key) {
    console.log(key, obj[key]);
});

ECMAScript 6 agrega for...of:

for (const key of Object.keys(obj)) {
    console.log(key, obj[key]);
}

ECMAScript 8 agrega Object.entries()lo que evita tener que buscar cada valor en el objeto original:

Object.entries(obj).forEach(
    ([key, value]) => console.log(key, value)
);

Puedes combinar for...of, desestructurar y Object.entries:

for (const [key, value] of Object.entries(obj)) {
    console.log(key, value);
}

Ambos iteran las propiedades en Object.keys()el Object.entries()mismo orden que un for...inbucle pero ignoran la cadena del prototipo . Sólo se iteran las propiedades enumerables propias del objeto.

Axel Rauschmayer avatar Apr 20 '2011 21:04 Axel Rauschmayer