Main Contents

Маленькие причуды массивов

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];

После выполнения функции над этим массивом мы обнаружим, что внутри массива осталась четверка.

В чем проблема?

(more…)

Filed under: Tips and tricks | Comments (0)