Маленькие причуды массивов
January 4, 2008 by Scratch
Иногда самые простые вещи могут поставить в тупик. Например, такая банальная штука как удаление элемента из массива. Собственно, с одним таким багом я столкнулся сегодня, и хотел бы его описать.
Итак, представим ситуацию. У нас есть JS код, в котором объявлен массив. Например, вида
var arr = [1,2,3,4,5,6,7];
Теперь перед нами стоит задача — удалить все четные элементы. Причем — удалить из исходного массива, а не получить новый
Для этого обычно пишется такая функция:
function cleanEven(arr) { // проходим по всем элементам for (var i = 0; i < arr.length; i++) { // Если элемент делится нацело на два if ( ! (arr[i] % 2)) { // Заменяем часть массива // с позиции i, длиной 1 на пустоту // (то есть удаляем i-тый элемент массива) arr.splice(i, 1); } } }
После запуска и выполнения все вроде бы работает. В моем тестовом запуске все сработало нормально.
Но — попробуем этот же код на массиве
var arr = [1,2,3,4,4,3,2,1];
После выполнения функции над этим массивом мы обнаружим, что внутри массива осталась четверка.
В чем проблема?
Filed under: Tips and tricks | Comments (0)