Поиск элементов: find(), some(), every()
Чтобы найти животное по имени, вы написали бы цикл с break, как в уроке про циклы:
let leo;
for (const animal of animals) {
if (animal.name === "Лео") {
leo = animal;
break;
}
}
console.log(leo);{ name: "Лео", species: "лев", age: 6 }let leo; создаёт переменную без значения, поэтому в ней лежит undefined, пока цикл не найдёт Лео. Метод find() делает то же в одну строку. Он возвращает первый элемент, для которого колбэк вернул true, и, как break, на этом прекращает поиск:
const leo = animals.find((animal) => animal.name === "Лео");
console.log(leo.species);левВ отличие от filter(), который всегда возвращает массив, find() возвращает сам элемент. Если ни один элемент не подходит под условие, он возвращает undefined. Чтение свойства у undefined завершает программу с ошибкой, поэтому сначала проверьте результат:
const tiger = animals.find((animal) => animal.species === "тигр");
if (tiger === undefined) {
console.log("У нас нет тигра.");
} else {
console.log(tiger.name);
}У нас нет тигра.Иногда сам элемент не нужен, нужен только ответ «да» или «нет». some() возвращает true, если колбэк вернул true хотя бы для одного элемента. every() возвращает true, только если колбэк вернул true для всех:
console.log(animals.some((animal) => animal.age > 10));
console.log(animals.every((animal) => animal.age > 3));true
falseБим старше 10, поэтому some() возвращает true. Возраст Пипа — всего 2, так что не каждое животное старше 3, и every() возвращает false.
Типичная ошибка — использовать filter(), когда нужен один элемент. animals.filter((animal) => animal.name === "Лео").species даёт undefined: filter() возвращает массив, в котором лежит Лео, а у массива нет свойства species.
Задание
- 1
С помощью
find()найдите книгу, название которой записано вwanted, и выведите её автора:Михаэль Энде. Если такой книги в библиотеке нет, выведите вместо этогоУ нас такой книги нет.Проверьте: заменитеwantedна"Хайди", а потом верните обратно. - 2
Ниже с помощью
some()выведите, есть ли на полке хотя бы одна книга:Хоть одна на полке: true. Подсказка:availableуже равноtrueилиfalse, поэтому колбэк может вернуть его как есть. - 3
Наконец, с помощью
every()выведите, все ли книги на полке:Все на полке: false.