Rozważmy kod poniżej:Problem z JavaScript dla pętli
function splicer()
{
var arrayElements = ["elem1","elem2","elem3","elem4"];
for(var index in arrayElements)
{
arrayElements.splice(index,1);
}
alert("Elements: "+arrayElements);
}
Powyższa funkcja zadaniem jest usunięcie wszystkich elementów z tablicy "arrayElements"
. Ale tak nie będzie.
Silnik JavaScript zachowuje numer "index"
i nie ma nic przeciwko modyfikacji tablicy. Ludzie mogą się spodziewać czegoś podobnego "for each"
pętli, które nie mają tego rodzaju kwestii
nawet następujący kod nie wydają się działać:
function splicer()
{
...
for(var index in arrayElements)
{
arrayElements.splice(index--,1);
}
...
}
nawet przy zmianie wartości „wskaźnika” zmiennej wydaje się nie działać. zmieniona wartość jest dostępna wewnątrz bloku "for (...) {...}", ale gdy pętla osiągnie kolejną iterację, wartość zostanie zresetowana i będzie kontynuowana od następnego indeksu jako mechanizm zegarowy.
więc wydaje kod jak to może być jedynym rozwiązaniem:
function splicer()
{
var arrayElements = ["elem1","elem2","elem3","elem4"];
for(var index=0;index<arrayElements.length;index++)
{
arrayElements.splice(index--,1);
}
alert("Elements: "+arrayElements);
}
Testowane: Firefox 16 Beta.
Ale umieszczenie operatorem, wewnątrz metody "splice()"
wydaje się być mylące na pierwszy rzut oka.
To może być warte rozważenia dla "W3C"
lub kogo to dotyczy, aby znaleźć dobre rozwiązanie.
Możliwy duplikat http://stackoverflow.com/questions/500504/javascript-for-in-with-arrays –