Удаление элементов массива

Удалить элемент массива можно как со сдвигом расположенных позже него элементов, так и без него. Если удаление элемента не должно сопровождаться изменением длины массива, то нужно использовать оператор delete:

var arr:Array=[l,2,3];
delete arr[1];
trace(arr); // Выводит: 1, undefined, 2

Анализ результата трассирования массива после удаления при помощи delete одного из его элементов может привести к неверному выводу о том, что данный oneратор по-разному ведет себя по отношению к свойствам объектов и элементам массива. Якобы, свойства удаляются безвозвратно, а элементам массива лишь присваивается значение undefined. На самом деле это не так. Элементы массива — это такие же свойства, как и любые другие. Поэтому оператор delete должен их именно удалять, а не заменять их значение на undefined. Чтобы подтвердить это утверждение, перечислим все свойства объекта класса Array после удаления одного из элементов при помощи цикла for—in:

var arr:Array = [1, 2, 3];
delete arr[1]; // Удаляем свойство с именем "1"
for (var i in arr) {
trace(i); // Выводит: 2 0 (свойство 1 отсутствует)
};

Приведенный пример показывает, что delete полностью удаляет элемент массива.


Если бы он просто присваивал ему значение undefined, то при перечислении элемент был бы обнаружен:

var arr:Array = [1, 2, 3];
arr[1] = undefined;
for (var i in arr) {
trace(i); // Выводит: 2 1 0 (элемент 1 удален не быт.)

При трассировке массива с реально не существующими элементами они отображаются со значением undefined — это связано с используемым для перевода массивов в строки алгоритмом, Подробно о нем мы поговорим, когда будем разбирать метод toString().

То, как вы удалите значение элемента массива — присвоив ему undefined или удалив соответствующее свойство при помощи оператора delete, — имеет значение, если последующая обработка массива проводится при помощи цикла for—in.

Иногда удаление элемента массива должно происходить с изменением его длины. Аналогично добавлению элементов в массив, имеются три типа этой задачи:

• элемент должен быть удален из вершины массива;
• элемент должен быть удален из конца массива;
• элемент или группу элементов необходимо удалить начиная от произвольной позиции.

Чтобы удалить элемент из начала массива, нужно использовать метод shift() (в противоположность методу unshift(), добавляющему элементы в начало массива).


В отличие от unshift(), shift() может изменить длину массива только на один элемент. По этой причине параметра он не принимает:

var arr:Array = [1,2,3];
trace(arr.shift()); // Выводит: 1
trace(arr); // Выводит: 2, 3

Обратите внимание, что метод shift() возвращает значение удаленного им элемента. Аналогичным методу shift(), но удаляющим элемент из конца массива, является метод рор(). Пример его использования:

var arr:Array = [1, 2, 3];
trace(arr.pop()); // Выводит: 3
trace(arr); // Выводит: 1, 2

Наиболее простой и универсальный метод удаления элементов из конца массива — это изменение свойства length до нужной величины:

var arr:Array = [1, 2, 3];
arr.length=1; // Отсекаем два элемента
trace(arr); // Выводит: 1

В том, что при уменьшении значения свойства length лишние элементы действительно удаляются, можно убедиться, перечислив все элементы массива при помощи цикла for—in. Осуществите эту проверку самостоятельно.

Наиболее мощными возможностями по удалению элементов массива обладает метод splice(). Используя его, можно удалить произвольное число элементов начиная от любой позиции.


Так как синтаксис метода splice() был подробно рассмотрен в предыдущем разделе, то возвращаться к нему мы не будем. Приведем лишь пример удаления группы элементов:

var arr:Array = [1, 2, 3, 4, 5];
trace(arr.splice(1, 2)); // Выводит: 2, 3 (удаленные элементы)
trace(arr); // Выводит: 1, 4, 5

Особенностью метода splice() является то, что он возвращает удаленные элементы в виде массива.

Это может быть использовано для выделения из массива нужного фрагмента.

На практике методы unshift(), push(), shtft(), pop() обычно используются для эмуляции таких структур данных, как стеки и очереди. Стек — это простейшая структура данных, главной особенностью которой является то, как добавляются и удаляются элементы. При этом используется принцип FILO (first-in-last-out — первым вошел — последним вышел, т. е. элемент можно добавить лишь в вершину стека и лишь верхний элемент в системе может быть удален. Очередь очень похожа на стек, затем исключением, что удаляется элемент не из вершины, а из начала (т. е. реализуется принцип FIFO — first-in-first-out (первым вошел и первым вышел)).

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Action Script на эту тему:
Выделение фрагмента массива
Длина массива. Свойство length
Добавление элементов в массив
Извлечение и переопределение элементов массива
Инверсия массива

Вернуться в раздел: Action Script / 7. Массивы (класс Array)