Выразительный JavaScript.

Дальнейшая массивология.

В конце главы хочу познакомить вас ещё с несколькими концепциями, относящимися к объектам. Начнём с полезных методов, имеющихся у массивов.

Мы видели методы push и pop, которые добавляют и отнимают элементы в конце массива. Соответствующие методы для начала массива называются unshift и shift.

Var todoList = [];

Function rememberTo(task) {

TodoList.push(task);

}

Function whatIsNext() {

Return todoList.shift();

}

Function urgentlyRememberTo(task) {

TodoList.unshift(task);

}

Данная программа управляет списком дел. Вы добавляете дела в конец списка, вызывая rememberTo("поесть"), а когда вы готовы заняться чем-то, вызываете whatIsNext(), чтобы получить (и удалить) первый элемент списка. Функция urgentlyRememberTo тоже добавляет задачу, но только в начало списка.

У метода indexOf есть родственник по имени lastIndexOf, который начинает поиск элемента в массиве с конца:

Console.log([1, 2, 3, 2, 1].indexOf(2));

// → 1.

Console.log([1, 2, 3, 2, 1].lastIndexOf(2));

// → 3.

Оба метода, indexOf и lastIndexOf, принимают необязательный второй аргумент, который задаёт начальную позицию поиска.

Ещё один важный метод – slice, который принимает номера начального (start) и конечного (end) элементов, и возвращает массив, состоящий только из элементов, попадающих в этот промежуток. Включая тот, что находится по индексу start, но исключая тот, что по индексу end.

Console.log([0, 1, 2, 3, 4].slice(2, 4));

// → [2, 3].

Console.log([0, 1, 2, 3, 4].slice(2));

// → [2, 3, 4].

Когда индекс end не задан, slice выбирает все элементы после индекса start. У строк есть схожий метод, который работает так же.

Метод concat используется для склейки массивов, примерно как оператор + склеивает строки. В примере показаны методы concat и slice в деле. Функция принимает массив array и индекс index, и возвращает новый массив, который является копией предыдущего, за исключением удалённого элемента, находившегося по индексу index.

Function remove(array, index) {

Return array.slice(0, index).concat(array.slice(index + 1));

}

Console.log(remove(["a", "b", "c", "d", "e"], 2));

// → ["a", "b", "d", "e"].