Добавлять элементы в массив, равно как и удалять их, можно также, как и обычные свойства любых других объектов. С тем лишь отличием, что при добавлении числовых свойств может изменятся свойство length, а при изменении свойства length могут удаляться числовые свойства. В общем случае алгоритм установки свойств у массивов примерно следующий:
i, если length меньше или равен i, то length устанавливается равным i + 1.length
0, то бросается RangeError.length.var a = [0, 1, 2];
alert(a.length); // 3
a[5] = 5;
alert(a.length); // 6
delete a[5];
alert(a.length); // 6: при удалении элементов length не изменяется.
a.length = 1;
alert([0 in a, 1 in a, 2 in a]); // true,false,false: элементы с индексами 1 и 2 удалены
try {
a.length = -1;
} catch (e) {
alert(e.message); // RangeError
}
Из того факта, что при установке length удаляются "лишние" элементы, следует способ очистки массива. Если вас по какой-то причине не устраивает присваивание переменной нового пустого массива, а нужно именно обнулить существующий, то достаточно присвоить его свойству length значение 0.
var a = [0, 1, 2, 3, 4, 5], b = a;
// Имеем две переменных, хранящих ссылки на один и тот же массив
a = []; // Если сделаем так, то в a и b будут лежать ссылки на разные массивы
alert([a.length, b.length]); // 0,6
var a = [0, 1, 2, 3, 4, 5], b = a;
a.length = 0; // Очистили массив, на который ссылаются значения обеих переменных
alert([a.length, b.length]) // 0,0
push, pop, shift и unshiftНесмотря на то, что можно и вручную изменять элементы массива, рекомендуется использовать для этого встроенные методы, что будет гарантировать отсутствие пропусков в массиве и корректное значение свойства length. Корректное в том смысле, что оно будет равно количеству элементов массива.
Метод push добавляет переданные элементы в конец массива. Метод pop возвращает последний элемент массива и удаляет его.
var a = [];
a.push(5, 6, 7);
alert(a.length + ';' + a); // 3;5,6,7
alert(a.pop()); // 7
alert(a.length + ';' + a); // 2;5,6
Метод unshift добавляет переданные элементы в начало массива. Элементы будут располагаться в том же порядке, в каком они были переданы. Метод shift возвращает первый элемент массива и удаляет его.
var a = [1];
a.unshift(9, 8, 7);
alert(a.length + ';' + a); // 4;9,8,7,1
alert(a.shift()); // 9
alert(a.length + ';' + a); // 3;8,7,1
В Internet Explorer младше 8-й версии unshift возвращает undefined, во всех остальных браузерах — новое значение length. Так что лучше не надеяться на возвращаемое от unshift значение.
var a = [];
alert(a.unshift(1, 2, 3)); // IE 6,7: undefined
// IE8 и остальные: 3
Метод splice имеет сигнатуру Array.prototype.splice(start, deleteCount [, item1 [, item2 [, ...]]]).
Он удаляет из массива deleteCount элементов начиная с индекса start. Если передано больше двух аргументов, то третий и последующие аргументы вставляются в массив заместо удалённых. Если start отрицательный, то индекс, с которого начнётся удаление, будет равен length + start. Возвращает массив из удалённых элементов. Таким образом с помощью метода splice можно удалять элементы из середины массива или добавлять произвольное количество в произвольное место массива.
var a = [0, 1, 2, 3, 4, 5, 6];
// Удалим три средних элемента
a.splice(2, 3);
alert(a); // 0,1,5,6
// Добавим два элемена перед последним
a.splice(-1, 0, 7, 8);
alert(a); // 0,1,5,7,8,6
// Заменим второй и третий элементы на три строки
a.splice(1, 2, 'a', 'b', 'c');
alert(a); // 0,a,b,c,7,8,6
В простейшем случае, если нужно удалить элемент с индексом i, то нужно у массива вызвать метод splice с аргументами i и 1.
Вообще говоря, второй аргумент у метода splice необязательный, но поведение функции с одним аргументов отличается в разных браузерах.
start до конца массива.start - 1, т.е. start-й по счёту.Поэтому всегда следует передавать в этот метод как минимум два элемента.