Загрузка...

Перебор массивов

В songs лежат rain, tide и dusk, и число на всей этой странице заморожено, потому что forEach только заходит в гости и не удлиняет и не укорачивает список, как в прошлом уроке.

Длина не сдвигается

На этот раз ход — это вызов метода, и индекс может прийти вместе, не так, как у for...of, который отдаёт только значение. Ни одно название не приклеивается в конец, и ни одно не выпадает из списка.

Функция, которую ты отдаёшь

Ты отдаёшь функцию, она бежит по одному разу на песню, и карточка ниже — договор этой страницы.

📊 Что даёт forEach

Часть Когда приходит Это не
первый аргумент на каждом заходе длина
второй аргумент только если ты его назвал обязательное
результат вызова когда forEach закончил новый массив
length после когда читаешь songs.length изменённое заходом

Песня — первый аргумент, а индекс — второй, его можно не писать.

Порядок в консоли

Напечатай каждое название. Сначала rain, потом tide, в конце dusk.

Напечатай каждое название

javascript
let songs = ["rain", "tide", "dusk"];
songs.forEach(function (title) {
console.log(title);
});

Выходят три строки, от начала массива к концу. Три строки-значения всё ещё сидят в тех же ячейках.

Индекс рядом с названием

javascript
let songs = ["rain", "tide", "dusk"];
songs.forEach(function (title, i) {
console.log(i);
console.log(title);
});

Ноль принадлежит rain, два принадлежит dusk, а tide между ними на единице.

Вызов даёт undefined

javascript
let songs = ["rain", "tide", "dusk"];
let result = songs.forEach(function (title) {
console.log(title);
});
console.log(result);
console.log(songs.length);

Положи вызов в переменную и напечатай её, чтобы увидеть undefined: это не название и не длина. Печать length по-прежнему 3.

return не обрывает ход

javascript
let songs = ["rain", "tide", "dusk"];
songs.forEach(function (title) {
if (title === "tide") {
return;
}
console.log(title);
});

Если название — tide и ты сразу возвращаешься, эта строка не печатается. Ход не останавливается, и dusk всё равно выходит.

Считай заходы сам

javascript
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, но сумму вёл ты сам, вызов её не вернул.

Названия в абзаце

Собери строку с пробелом между названиями и положи её в абзац. Длину в строку не клади.

Демо страницы — названия в одной строке

html
<!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 и обновить страницу, среднее слово меняется. Заход по-прежнему покрывает три названия.

Пройди сам

  1. Напечатай три названия. Проверь, что rain первый
  2. Напечатай каждый индекс и проверь, что rain на 0
  3. Сохрани результат вызова и увидь undefined, пока длина остаётся 3
  4. На tide сразу сделай return и проверь, что dusk ещё печатается
  5. На каждом заходе прибавляй 1 к seen и проверь, что выходит 3
  6. Прочитай строку страницы, смени tide на fog и обнови

Легко прочитать не так

  • Не жди, что вызов вернёт последнее название. Назад приходит не песня
  • Не жди, что вызов вернёт длину
  • Не пиши break внутри функции, это синтаксическая ошибка
  • Не думай, что return после tide остановит ещё и dusk
  • Не читай второй параметр как название
  • Не ищи значение на этой странице

Унеси с собой

  • forEach заходит к каждому элементу спереди назад, и первый параметр — сам элемент
  • Второй параметр — индекс
  • Собственный результат вызова — undefined
  • return внутри функции пропускает только этот заход
  • Следующая страница ищет по значению

🧠 Проверьте Свои Знания

Готов к Началу

Проверьте Свои Знания

Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему

❓
8
Вопросы
🎯
70%
Для Прохождения
♾️
∞
Время
🔄
∞
Попытки

📝 Инструкции

  • Внимательно прочитайте каждый вопрос
  • Выберите лучший ответ на каждый вопрос
  • Вы можете пересдавать тест столько раз, сколько захотите
  • Ваш прогресс будет показан вверху