Методы массивов
На прошлой странице перезапись ячейки не трогала число цветов. Здесь корзина с хлебом, молоком и яйцами. Вызов метода имеет право сделать позиций больше или меньше.
Число может сдвинуться
Эти пять вызовов правят тот самый массив, который уже у тебя в руках, а не свежий текст, как методы строки, и не функцию, которую ты сам положил на объект. push, pop, unshift, shift и splice — готовые инструменты списка.
Пять вызовов на одной карточке
Держи карточку рядом с примерами, чтобы не листать наверх каждый раз. Часто значение, которое вернулось, — это не корзина. Это число, ушедший предмет или маленький массив.
📊 Пять вызовов массива
| Вызов | Где действует | Что возвращает | length |
|---|---|---|---|
push |
конец | новая длина | растёт на столько, сколько передал |
pop |
конец | удалённый элемент | меньше на один |
unshift |
начало | новая длина | растёт на столько, сколько передал |
shift |
начало | удалённый элемент | меньше на один |
splice |
индекс, который выбрал сам | маленький массив удалённых | меньше на число удалений |
Вызовы, которые добавляют, отдают новую длину числом, а вызовы, которые снимают с края, отдают сам предмет. splice даже ради одной ячейки возвращает маленький массив, и слово сидит в индексе 0 этого результата.
Чай в конце
Корзина начинается с хлеба, молока и яиц. push кладёт чай после яиц. Число, которое слышишь сразу, — это сколько ячеек есть сейчас.
let cart = ["bread", "milk", "eggs"];
let n = cart.push("tea");
console.log(n);
console.log(cart[3]);
console.log(cart.length);
n равно 4, то есть новой длине, а не слову tea. Индекс 3 держит чай, и length тоже 4, потому что в конец добавлен один предмет. Два аргумента вырастили бы корзину на две ячейки. Здесь аргумент один, чтобы число читалось легко.
let cart = ["bread", "milk", "eggs"];
let gone = cart.pop();
console.log(gone);
console.log(cart.length);
Последний предмет уходит
pop снимает яйца с конца и отдаёт эту строку, а length становится 2. В корзине остаются хлеб, затем молоко. Этот вызов не отдаёт новую длину. Пустая корзина вернула бы undefined, и примеры этой страницы с пустой не начинаются.
let cart = ["bread", "milk", "eggs"];
let n = cart.unshift("tea");
console.log(n);
console.log(cart[0]);
console.log(cart[1]);
Спереди новое
unshift тоже возвращает 4, потому что это новая длина, и индекс 0 теперь чай. Хлеб съезжает на индекс 1, и ни одна ячейка не перезаписана. Каждый старый предмет делает шаг к концу.
let cart = ["bread", "milk", "eggs"];
let gone = cart.shift();
console.log(gone);
console.log(cart[0]);
console.log(cart.length);
Спереди пустеет
shift возвращает хлеб, то есть ушедший предмет, а не длину. После этого индекс 0 — молоко, а length равен 2. Яйца всё ещё последние. Они просто сидят теперь на индексе 1.
let cart = ["bread", "milk", "eggs"];
let removed = cart.splice(1, 1);
console.log(removed[0]);
console.log(cart.length);
console.log(cart[1]);
Ячейка, которую выбрал ты
Первый аргумент — начальный индекс, второй говорит, сколько ячеек стереть. Молоко уходит, и removed — массив из одной ячейки, поэтому removed[0] это молоко, а сам вызов не является строкой молока. length становится 2, индекс 1 — яйца, потому что хлеб остался на 0, а яйца закрыли дырку. Если передать 0 как число удалений, будет вставка без удаления. Эту форму пока отложи.
Страница печатает новую длину
Добавь чай через push. Потом запиши length в абзац. Строка должна быть числом, а не списком покупок.
<!DOCTYPE html>
<html>
<head>
<title>array-methods — page</title>
</head>
<body>
<p id="line">…</p>
<script>
let cart = ["bread", "milk", "eggs"];
cart.push("tea");
let box = document.getElementById("line");
box.textContent = cart.length;
</script>
</body>
</html>
Абзац показывает 4. Поменяй добавленную строку с чая на джем и обнови страницу; строка остаётся 4, потому что предмет по-прежнему один. Слово сменилось, число нет. Хлеб, молоко и яйца остаются перед тем, что ты отправил через push.
Потренируйся на свежей корзине
- Через
pushположи чай после хлеба, молока и яиц и прочитай и вернувшееся число, и индекс 3. - Один раз вызови
pop, прочитай удалённое слово и новую длину, затем черезunshiftпоставь чай вперёд и посмотри индексы 0 и 1. - Один раз вызови
shift, прочитай ушедшее слово и новый индекс 0, затемspliceс индекса 1 с удалением одной ячейки и поставьremoved[0]рядом с длиной. - На странице сделай
pushчая, обнови, прочитай строку, потом замени чай на джем и обнови ещё раз.
Где теряют балл
- Хотел добавить ячейку, а написал
cart[1] = "tea", или забыл скобки уpushиpop - Принял значение от
popза новую длину - Ждал, что
spliceвернёт голую строку молока, а не массив - Решил, что после
unshiftиндекс 0 всё ещё хлеб, или смешал эту страницу с обходом каждого элемента и поиском по значению
Что унести
- Эти вызовы правят тот же массив
pushиunshiftвозвращают новую длину, аpopиshift— ушедший предметspliceвозвращает маленький массив удалённых- Абзац может после
pushпоказать только длину - Дальше идёт перебор массивов, а поиск в массивах после него
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху