Загрузка...

Поиск в массивах

В stamps лежат oak, затем elm и ещё раз oak, и на этой странице ящик остаётся того же размера, потому что ты ищешь одно значение, а не обходишь каждую ячейку.

Спроси марку

На прошлой странице forEach обошёл каждую песню, и сам вызов вернулся как undefined. Здесь ты называешь одну марку, и ящик не растёт и не сжимается.

Четыре вида ответа

Прежде чем читать число, реши, какой вид ответа тебе нужен. Потом выбери метод именно под этот вид.

📊 Что возвращает каждый поиск

Метод Вопрос Что возвращается Если нет
indexOf ячейка первого совпадения индекс -1
lastIndexOf ячейка последнего совпадения индекс -1
includes значение лежит в ящике true или false false
find предмет, у которого проверка верна сам предмет undefined

Номера ячеек приходят от indexOf и lastIndexOf, а includes и find номер ячейки не отдают.

Передняя марка

Спроси, в какой ячейке сидит первый oak. Жди число 0.

Первый oak

javascript
let stamps = ["oak", "elm", "oak"];
let slot = stamps.indexOf("oak");
console.log(slot);

В журнале 0, и задний oak в этот результат не входит.

Нет pine

javascript
let stamps = ["oak", "elm", "oak"];
let slot = stamps.indexOf("pine");
console.log(slot);
console.log(stamps.length);

pine вообще не клали, и в журнале -1. Длина остаётся 3, так что промах — это не удаление марки.

Задний oak

javascript
let stamps = ["oak", "elm", "oak"];
let slot = stamps.lastIndexOf("oak");
console.log(slot);

В журнале 2, то есть oak в конце ящика, а не марка спереди.

Да или нет

javascript
let stamps = ["oak", "elm", "oak"];
console.log(stamps.includes("elm"));
console.log(stamps.includes("pine"));

Для elm печатается true. Для pine печатается false. Это false — не -1.

Сама марка

javascript
let stamps = ["oak", "elm", "oak"];
let hit = stamps.find(function (name) {
return name === "elm";
});
console.log(hit);
let miss = stamps.find(function (name) {
return name === "pine";
});
console.log(miss);

Первая строка — это текст elm, вторая — undefined. Проверка, которую не прошла ни одна марка, не является номером ячейки.

Запиши ячейку

Преврати ячейку первого oak в текст, а если поиск дал -1, покажи в абзаце слово missing.

Демо страницы — ячейка или missing

html
<!DOCTYPE html>
<html>
<head>
<title>array-search — page</title>
</head>
<body>
<p id="slot">…</p>
<script>
let stamps = ["oak", "elm", "oak"];
let slot = stamps.indexOf("oak");
let line = "missing";
if (slot !== -1) {
line = String(slot);
}
let box = document.getElementById("slot");
box.textContent = line;
</script>
</body>
</html>

Абзац показывает 0. Поменяй поиск на pine и обнови страницу. Тогда увидишь слово missing.

Поищи сам

Сделай эти шесть проверок на том же ящике.

  1. Запиши ячейку первого oak и жди 0
  2. Запиши поиск pine и жди -1, длина пусть останется 3
  3. Запиши ячейку последнего oak и жди 2
  4. Отдельно отметь, есть ли elm и есть ли pine
  5. Найди elm через find, найди и pine, и положи текст рядом с undefined
  6. Прочитай абзац, поищи pine и обнови страницу

Легко перепутать

Не склеивай эти шесть случаев.

  • Не считай -1 ячейкой, которую можно прочитать
  • Не читай true или false как номер ячейки
  • Не жди, что find вернёт 1 для elm
  • Не бери forEach, когда нужно только да или нет
  • Не считай совпадением другой тип или другой регистр
  • Не проверяй успех через if (slot), ведь 0 — настоящее попадание

Что унести с собой

Держи эти различия порознь.

  • Первое совпадение или -1 даёт indexOf
  • Последнее совпадение или -1 даёт lastIndexOf
  • Да или нет даёт includes
  • Саму марку или undefined даёт find
  • Промах не меняет длину
  • Следующая страница — про дату и время

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

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

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

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

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

📝 Инструкции

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