Considere el siguiente código:Problema con Javascript bucle For
function splicer()
{
var arrayElements = ["elem1","elem2","elem3","elem4"];
for(var index in arrayElements)
{
arrayElements.splice(index,1);
}
alert("Elements: "+arrayElements);
}
La función anterior se supone que eliminar todos los elementos de la matriz "arrayElements"
. Pero no lo hará.
El motor de Javascript mantiene el "index"
tal como está y no le molesta la matriz que se está modificando. gente podría esperar algo así como "for each"
bucle que no tiene este tipo de problema
aunque no parece el código siguiente a la obra:
function splicer()
{
...
for(var index in arrayElements)
{
arrayElements.splice(index--,1);
}
...
}
incluso cuando se cambia el valor del "índice" variables no parece funcionar el valor modificado está disponible dentro del bloque "for (...) {...}" pero, a medida que el ciclo alcanza la siguiente iteración, el valor se restablece y continúa desde el siguiente índice como un mecanismo de relojería.
por lo que parece un código como este podría ser la única solución:
function splicer()
{
var arrayElements = ["elem1","elem2","elem3","elem4"];
for(var index=0;index<arrayElements.length;index++)
{
arrayElements.splice(index--,1);
}
alert("Elements: "+arrayElements);
}
Probado en: Firefox 16 Beta.
Pero la colocación de un operador unitario dentro de un método "splice()"
parece ser engañosa a primera vista.
Esto podría valer la pena considerar el "W3C"
o quien corresponda para que se les ocurra una buena solución.
duplicado Posible de http://stackoverflow.com/questions/500504/javascript-for-in-with-arrays –