sintaxis - para en javascript
For..In bucles en JavaScript-pares de valores clave (14)
A continuación se muestra un ejemplo que se acerca lo máximo posible.
for(var key in data){
var value = data[key];
//your processing here
}
Si está utilizando jQuery, consulte: http://api.jquery.com/jQuery.each/
Me preguntaba si hay una manera de hacer algo como un bucle PHP foreach
en JavaScript. La funcionalidad que busco es algo como este fragmento de código PHP:
foreach($data as $key => $value) { }
Estaba mirando el JS for..in
loop, pero parece que no hay manera de especificar el as
. Si hago esto con un ''normal'' para bucle ( for(var i = 0; i < data.length; i++
), ¿hay una manera de agarrar los pares clave => valor?
ES6 proporcionará Map.prototype.forEach (devolución de llamada) que se puede utilizar de esta manera
myMap.forEach(function(value, key, myMap) {
// Do something
});
El for in
funcionará para usted. Si piensas en un objeto como un mapa:
for(key in obj){
// The key is key
// The value is obj[key]
}
Nadie ha mencionado Object.keys
así que lo mencionaré.
Object.keys(obj).forEach(function (key) {
// do something with obj[key]
});
Puedes usar el for..in
para eso.
for (var key in data)
{
var value = data[key];
}
Puedes usar un bucle ''for in'' para esto:
for (var key in bar) {
var value = bar[key];
}
Sí, puedes tener matrices asociativas también en javascript:
var obj =
{
name:''some name'',
otherProperty:''prop value'',
date: new Date()
};
for(i in obj)
{
var propVal = obj[i]; // i is the key, and obj[i] is the value ...
}
Si puede utilizar ES6 forma nativa o con Babel (compilador js), puede hacer lo siguiente:
let test = {a: 1, b: 2, c: 3};
for (let [key, value] of Object.entries(test)) {
console.log(key, value);
}
Que imprimirá esta salida:
a 1
b 2
c 3
El método Object.entries()
devuelve una matriz de los pares de la propiedad enumerable [key, value]
de un objeto dado, en el mismo orden que el proporcionado por un bucle for...in
(la diferencia es que un bucle for-in se enumera propiedades en la cadena de prototipos también) .
- Documentación de Object.entries
- for...of documentación
- Destructurando la documentación de la tarea.
- Documentación enumerable y titularidad de inmuebles.
¡Espero eso ayude! =)
Supongo que sabes que i
es la clave y que puedes obtener el valor a través de los data[i]
(y solo quieres un atajo para esto).
ECMAScript5 introdujo forEach
[MDN] para arreglos (parece que tienes un arreglo):
data.forEach(function(value, index) {
});
La documentación de MDN proporciona un complemento para los navegadores que no la admiten.
Por supuesto, esto no funciona para los objetos, pero puede crear una función similar para ellos:
function forEach(object, callback) {
for(var prop in object) {
if(object.hasOwnProperty(prop)) {
callback(prop, object[prop]);
}
}
}
Dado que ha etiquetado la pregunta con jquery , jQuery proporciona $.each
[docs] que se $.each
en ambas estructuras de matriz y objeto.
for (var k in target){
if (target.hasOwnProperty(k)) {
alert("Key is " + k + ", value is" + target[k]);
}
}
hasOwnProperty
se utiliza para verificar si su target
realmente tiene 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 comprueba que k
no es un método (como si target
es un array
, recibirá muchos métodos de alerta, por ejemplo, indexOf
, push
, pop
, etc.)
for (var key in myMap) {
if (myMap.hasOwnProperty(key)) {
console.log("key =" + key);
console.log("value =" + myMap[key]);
}
}
En javascript, cada objeto tiene un montón de pares clave-valor incorporados que tienen metainformación. Cuando recorres todos los pares clave-valor para un objeto, también los recorres. El uso de hasOwnProperty () los filtra.
let test = {a: 1, b: 2, c: 3};
Object.entries(test).forEach(([key, value]) => console.log(key, value))
// a 1
// b 2
// c 3
var global = (function() {
return this;
})();
// Pair object, similar to Python
function Pair(key, value) {
this.key = key;
this.value = value;
this.toString = function() {
return "(" + key + ", " + value + ")";
};
}
/**
* as function
* @param {String} dataName A String holding the name of your pairs list.
* @return {Array:Pair} The data list filled
* with all pair objects.
*/
Object.prototype.as = function(dataName) {
var value, key, data;
global[dataName] = data = [];
for (key in this) {
if (this.hasOwnProperty(key)) {
value = this[key];
(function() {
var k = key,
v = value;
data.push(new Pair(k, v));
})();
}
}
return data;
};
var d = {
''one'': 1,
''two'': 2
};
// Loop on your (key, list) pairs in this way
for (var i = 0, max = d.as("data").length; i < max; i += 1) {
key = data[i].key;
value = data[i].value;
console.log("key: " + key + ", value: " + value);
}
// delete data when u''ve finished with it.
delete data;
var obj = {...};
for (var key in obj) {
var value = obj[key];
}
La sintaxis de PHP es sólo el azúcar.