|
|
|||||
Удаление элементов из массива
Здравствуйте.
Мне нужно из массива удалять все элементы, равные определенному значению, но почему-то удаляются не все... Вот накатал легкий пример для наглядности: например хочу удалить из массива все вишни var arr:Array = new Array("яблоко","вишня","вишня","вишня", "яблоко"); trace("++++++++++++ ИСХОДНЫЙ МАССИВ ++++++++++++"); for (var i=0; i<arr.length; i++){ trace(arr[i]); } trace("+++++++++++ УДАЛЕННЫЕ ЭЛЕМЕНТЫ +++++++++++++"); for (var j=0; j<arr.length; j++){ if (arr[j] == "вишня"){ var t = arr.splice(j, 1); trace(t); } } trace("+++++++++++ МАССИВ ПОСЛЕ УДАЛЕНИЯ ЭЛЕМЕНТОВ +++++++++++++"); for (var k=0; k<arr.length; k++){ trace(arr[k]); } ++++++++++++ ИСХОДНЫЙ МАССИВ ++++++++++++ яблоко вишня вишня вишня яблоко +++++++++++ УДАЛЕННЫЕ ЭЛЕМЕНТЫ +++++++++++++ вишня вишня +++++++++++ МАССИВ ПОСЛЕ УДАЛЕНИЯ ЭЛЕМЕНТОВ +++++++++++++ яблоко вишня яблоко P.S. Если яблоки удалять - то все нормально удаляется...
__________________
кто не отвечает, того garbage collector забирает |
|
|||||
Дело в том, что когда вы удаляете элемент из массива, то j перескакивает через один элемент. (Последующие элементы сдвигаются)
Возвращайте его на место после удаления( j-- ).
__________________
There is no thing in this world that is not simple. |
|
|||||
Ага, уже догадался в чем дело ) Верно, индекс после удаления нужно уменьшать, так как размер массива уменьшается
__________________
кто не отвечает, того garbage collector забирает |
Часовой пояс GMT +4, время: 06:12. |
|
« Предыдущая тема | Следующая тема » |
|
|