Книга: Выразительный 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"]