For..In bucles en JavaScript: pares clave-valor
Me preguntaba si hay una manera de hacer algo como un foreach
bucle PHP en JavaScript. La funcionalidad que estoy buscando es algo como este fragmento de PHP:
foreach($data as $key => $value) { }
Estaba mirando el for..in
bucle JS, pero parece que no hay forma de especificar el archivo as
. Si hago esto con un bucle for 'normal' ( for(var i = 0; i < data.length; i++
), ¿hay alguna manera de tomar los pares clave => valor?
for (var k in target){
if (target.hasOwnProperty(k)) {
alert("Key is " + k + ", value is " + target[k]);
}
}
hasOwnProperty
se utiliza para comprobar si target
realmente tienes esa propiedad, en lugar de haberla heredado de su prototipo. Un poco más simple sería:
for (var k in target){
if (typeof target[k] !== 'function') {
alert("Key is " + k + ", value is" + target[k]);
}
}
Simplemente verifica que k
no sea un método (como si target
lo fuera, array
recibirá alertas sobre muchos métodos, por ejemplo indexOf
, push
etc. pop
)
Si puede usar ES6 de forma nativa o con Babel (compilador js), puede hacer lo siguiente:
const test = {a: 1, b: 2, c: 3};
for (const [key, value] of Object.entries(test)) {
console.log(key, value);
}
Que imprimirá este resultado:
a 1
b 2
c 3
El Object.entries()
método devuelve una matriz de pares de propiedades enumerables propios de un objeto determinado [key, value]
, en el mismo orden que el proporcionado por un for...in
bucle (la diferencia es que un bucle for-in también enumera las propiedades en la cadena del prototipo) .
- Documentación de entradas de objetos
- para...de documentación
- Documentación de la tarea de desestructuración
- Documentación de enumerabilidad y propiedad de propiedades.
Nadie lo ha mencionado Object.keys
así que lo mencionaré.
Object.keys(obj).forEach(function (key) {
// do something with obj[key]
});
for...in funcionará para usted.
for( var key in obj ) {
var value = obj[key];
}
En JavaScript moderno también puedes hacer esto:
for ( const [key,value] of Object.entries( obj ) ) {
}