элемента напоминает (но несколько отличается) присваивание значения
undefined
этому элементу. Обратите внимание, что применение оператора
delete
к элементу массива не изменяет значение свойства
length
и не сдвигает вниз элементы с более высокими индексами, чтобы заполнить пустоту, оставшуюся после удаления элемента. После удаления элемента массив превращается в разреженный массив.
Кроме того, как уже было показано выше, имеется возможность удалять элементы в конце массива простым присваиванием нового значения свойству
length
. Массивы имеют метод
рор
(противоположный методу
push
), который уменьшает длину массива на 1 и возвращает значение удаленного элемента. Также имеется метод
shift
(противоположный методу
unshift
), который удаляет элемент в начале массива. В отличие от оператора
delete
, метод
shift
сдвигает все элементы вниз на позицию ниже их текущих индексов. Методы
рор
и
shift
описываются в разделе 7.8 и в справочном разделе.
Наконец существует многоцелевой метод
splice
, позволяющий вставлять, удалять и замещать элементы массивов. Он изменяет значение свойства
length
и сдвигает элементы массива с более низкими или высокими индексами по мере необходимости. Подробности приводятся в разделе 7.8.
7.6. Обход элементов массива
Наиболее часто для обхода элементов массива используется цикл
for
(раздел 5.5.3):
var keys = Object.keys(o); // Получить массив имен свойств объекта о
var values = [] // Массив для сохранения значений свойств
for(var і = 0; і < keys.length; i++) { // Для каждого элемента в массиве
var key = keys[і]; // Получить имя свойства по индексу
values[i] = о[key]; // Сохранить значение в массиве values
}
Во
вложенных циклах и в других контекстах, когда скорость работы имеет критическое значение, иногда можно увидеть такой оптимизированный способ выполнения итераций по массиву, когда длина массива определяется только один раз, а не в каждой итерации:
for(var і = 0, len = keys.length; і < len; i++) {
// тело цикла осталось без изменений
}
В примерах выше предполагается, что выполняется обход плотного массива и все элементы содержат допустимые значения. В противном случае необходимо организовать проверку значений элементов массива перед их использованием. Если желательно исключить из обработки значения
null, undefined
и несуществующие элементы, проверку можно записать так:
for(var і = 0; і < a.length; i++) {
if (!a[і]) continue; // Пропустить null, undefined и несуществ. элементы // тело цикла
}
Если необходимо пропустить только значение undefined и несуществующие элементы, проверку можно записать так:
for(var і = 0; і < a.length; i++) {
if (a[і] === undefined) continue; // Пропустить undefined + несуществ. эл.
// тело цикла
}
Наконец, если необходимо пропустить только несуществующие элементы, а элементы со значением undefined обрабатывать как обычные элементы, проверку можно записать так:
for(var і = 0; і < a.length; i++) {
if (!(i in a)) continue ; // Пропустить несуществующие элементы
// тело цикла
}
Для обхода разреженных массивов можно также использовать цикл
for/in
(раздел 5.5.4). Этот цикл присваивает имена перечислимых свойств (включая индексы массива) переменной цикла. Отсутствующие индексы в итерациях не участвуют:
for(var index in sparseArray) {
var value = sparseArray[index];
// Далее следуют операции с индексами и значениями