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

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

Жанры

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

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

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

Студиозус 2

Шмаков Алексей Семенович
4. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Студиозус 2

Дважды одаренный. Том VI

Тарс Элиан
6. Дважды одаренный
Фантастика:
аниме
альтернативная история
фэнтези
фантастика: прочее
5.00
рейтинг книги
Дважды одаренный. Том VI

Чужбина

Седой Василий
2. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чужбина

Гримуар темного лорда III

Грехов Тимофей
3. Гримуар темного лорда
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар темного лорда III

Изгой Проклятого Клана

Пламенев Владимир
1. Изгой
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Изгой Проклятого Клана

Разведчик. Заброшенный в 43-й

Корчевский Юрий Григорьевич
Героическая фантастика
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.93
рейтинг книги
Разведчик. Заброшенный в 43-й

Личный аптекарь императора. Том 3

Карелин Сергей Витальевич
3. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Личный аптекарь императора. Том 3

Последний Герой. Том 4

Дамиров Рафаэль
Последний герой
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Последний Герой. Том 4

Неудержимый. Книга XXVII

Боярский Андрей
27. Неудержимый
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Неудержимый. Книга XXVII

Купеческая дочь замуж не желает

Шах Ольга
Фантастика:
фэнтези
6.89
рейтинг книги
Купеческая дочь замуж не желает

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

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

Новик

Ланцов Михаил Алексеевич
2. Помещик
Фантастика:
альтернативная история
6.67
рейтинг книги
Новик

Неудержимый. Книга XIX

Боярский Андрей
19. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIX

Отморозок 2

Поповский Андрей Владимирович
2. Отморозок
Фантастика:
попаданцы
5.00
рейтинг книги
Отморозок 2