Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

Удалять элементы массива можно с помощью оператора

delete
, как обычные свойства объектов:

а = [1.2.3];

delete а[1]; // теперь в массиве а отсутствует элемент с индексом 1

1 in а // => false: индекс 1 в массиве не определен

a.length // => 3: оператор delete не изменяет свойство length массива

Удаление

элемента напоминает (но несколько отличается) присваивание значения
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];

// Далее следуют операции с индексами и значениями

Поделиться:
Популярные книги

Гвардия. (Дилогия)

Мусаниф Сергей Сергеевич
65. В одном томе
Фантастика:
научная фантастика
8.57
рейтинг книги
Гвардия. (Дилогия)

Остаться в живых

Сорока Ирина
1. Призрачная Академия
Фантастика:
фэнтези
7.95
рейтинг книги
Остаться в живых

Егерь. Столичный гамбит

Скиба Николай
4. Зверолов
Фантастика:
рпг
уся
фэнтези
фантастика: прочее
попаданцы
6.67
рейтинг книги
Егерь. Столичный гамбит

Сфабрикованный Иисус

Эванс Крейг
Религия. Настоящее христианство
Документальная литература:
критика
5.00
рейтинг книги
Сфабрикованный Иисус

Из истории русской, советской и постсоветской цензуры

Рейфман Павел Семенович
Научно-образовательная:
история
5.00
рейтинг книги
Из истории русской, советской и постсоветской цензуры

An ordinary sex life

Астердис
Любовные романы:
современные любовные романы
love action
5.00
рейтинг книги
An ordinary sex life

Что нас не убивает

Абвов Алексей Сергеевич
Фантастика:
фэнтези
киберпанк
рпг
8.71
рейтинг книги
Что нас не убивает

#Бояръ-Аниме. Газлайтер. Том 11

Володин Григорий Григорьевич
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11

Король Ардена

Анри Софи
Фантастика:
фэнтези
5.00
рейтинг книги
Король Ардена

История кавалерии. Вооружение, тактика, крупнейшие сражения

Денисон Джордж Тэйлор
Научно-образовательная:
история
cпецслужбы
военная история
5.00
рейтинг книги
История кавалерии. Вооружение, тактика, крупнейшие сражения

Советская республика и капиталистический мир. Часть I. Первоначальный период организации сил

Троцкий Лев Давидович
Документальная литература:
публицистика
5.00
рейтинг книги
Советская республика и капиталистический мир. Часть I. Первоначальный период организации сил

Сага о копье: Омнибус. Том II

Коллектив авторов
Сага о Копье
Фантастика:
фэнтези
5.00
рейтинг книги
Сага о копье: Омнибус. Том II

Вода в доме и на участке

Гальперина Галина Анатольевна
3. Домашний мастер
Дом и Семья:
прочее домоводство
6.25
рейтинг книги
Вода в доме и на участке

H2o

Дубинянская Яна
Фантастика:
социально-философская фантастика
5.00
рейтинг книги
H2o