¿Cómo recorro o enumero un objeto JavaScript?
Tengo un objeto JavaScript como el siguiente:
var p = {
"p1": "value1",
"p2": "value2",
"p3": "value3"
};
¿ Cómo recorro todos los p
elementos de ( p1
,, ...) y obtengo sus claves y valores?p2
p3
Puede utilizar el for-in
bucle 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]);
}
}
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])
}
Observe el uso de for-of
en 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}`);
}
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...in
bucle pero ignoran la cadena del prototipo . Sólo se iteran las propiedades enumerables propias del objeto.