Перебор массивов
В songs лежат rain, tide и dusk, и число на всей этой странице заморожено, потому что forEach только заходит в гости и не удлиняет и не укорачивает список, как в прошлом уроке.
Длина не сдвигается
На этот раз ход — это вызов метода, и индекс может прийти вместе, не так, как у for...of, который отдаёт только значение. Ни одно название не приклеивается в конец, и ни одно не выпадает из списка.
Функция, которую ты отдаёшь
Ты отдаёшь функцию, она бежит по одному разу на песню, и карточка ниже — договор этой страницы.
📊 Что даёт forEach
| Часть | Когда приходит | Это не |
|---|---|---|
| первый аргумент | на каждом заходе | длина |
| второй аргумент | только если ты его назвал | обязательное |
| результат вызова | когда forEach закончил |
новый массив |
length после |
когда читаешь songs.length |
изменённое заходом |
Песня — первый аргумент, а индекс — второй, его можно не писать.
Порядок в консоли
Напечатай каждое название. Сначала rain, потом tide, в конце dusk.
let songs = ["rain", "tide", "dusk"];
songs.forEach(function (title) {
console.log(title);
});
Выходят три строки, от начала массива к концу. Три строки-значения всё ещё сидят в тех же ячейках.
let songs = ["rain", "tide", "dusk"];
songs.forEach(function (title, i) {
console.log(i);
console.log(title);
});
Ноль принадлежит rain, два принадлежит dusk, а tide между ними на единице.
let songs = ["rain", "tide", "dusk"];
let result = songs.forEach(function (title) {
console.log(title);
});
console.log(result);
console.log(songs.length);
Положи вызов в переменную и напечатай её, чтобы увидеть undefined: это не название и не длина. Печать length по-прежнему 3.
let songs = ["rain", "tide", "dusk"];
songs.forEach(function (title) {
if (title === "tide") {
return;
}
console.log(title);
});
Если название — tide и ты сразу возвращаешься, эта строка не печатается. Ход не останавливается, и dusk всё равно выходит.
let songs = ["rain", "tide", "dusk"];
let seen = 0;
songs.forEach(function (title) {
seen = seen + 1;
});
console.log(seen);
console.log(songs.length);
Твой счётчик встаёт на 3, и length тоже 3, но сумму вёл ты сам, вызов её не вернул.
Названия в абзаце
Собери строку с пробелом между названиями и положи её в абзац. Длину в строку не клади.
<!DOCTYPE html>
<html>
<head>
<title>array-iteration — page</title>
</head>
<body>
<p id="line">…</p>
<script>
let songs = ["rain", "tide", "dusk"];
let line = "";
songs.forEach(function (title) {
if (line !== "") {
line = line + " ";
}
line = line + title;
});
let box = document.getElementById("line");
box.textContent = line;
</script>
</body>
</html>
Строка показывает три названия через пробел, и если заменить tide на fog и обновить страницу, среднее слово меняется. Заход по-прежнему покрывает три названия.
Пройди сам
- Напечатай три названия. Проверь, что
rainпервый - Напечатай каждый индекс и проверь, что
rainна 0 - Сохрани результат вызова и увидь
undefined, пока длина остаётся 3 - На
tideсразу сделайreturnи проверь, чтоduskещё печатается - На каждом заходе прибавляй 1 к
seenи проверь, что выходит 3 - Прочитай строку страницы, смени
tideнаfogи обнови
Легко прочитать не так
- Не жди, что вызов вернёт последнее название. Назад приходит не песня
- Не жди, что вызов вернёт длину
- Не пиши
breakвнутри функции, это синтаксическая ошибка - Не думай, что
returnпослеtideостановит ещё иdusk - Не читай второй параметр как название
- Не ищи значение на этой странице
Унеси с собой
forEachзаходит к каждому элементу спереди назад, и первый параметр — сам элемент- Второй параметр — индекс
- Собственный результат вызова —
undefined returnвнутри функции пропускает только этот заход- Следующая страница ищет по значению
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху