Метод залежить від того, що шукаємо і що потрібно отримати.
includes(value) - чи є значення в масиві, true/false. Для примітивів (рядки, числа):
const roles = ['admin', 'editor'];
roles.includes('admin'); // true
indexOf(value) - позиція першого входження або -1. Колись це був єдиний спосіб перевірки (indexOf(x) !== -1), тепер для перевірки є includes. Відмінність у краєвому випадку: includes знаходить NaN, indexOf - ні.
some(predicate) - чи є хоча б один елемент, що задовольняє умову. Для об'єктів, де шукаємо за властивістю:
const users = [{ id: 1, active: false }, { id: 2, active: true }];
users.some((user) => user.active); // true
find(predicate) - сам елемент (перший відповідний) або undefined; findIndex - його позиція або -1. Є й варіанти з кінця: findLast, findLastIndex.
const user = users.find((user) => user.id === 2);
every(predicate) - протилежність some: чи всі елементи задовольняють умову.
Типова помилка - includes з об'єктами:
users.includes({ id: 1, active: false }); // false
Об'єкти порівнюються за посиланням, а не за вмістом. Новий об'єкт з тими самими полями - інший об'єкт. Для об'єктів використовують some/find з умовою.
Продуктивність. Усі ці методи перебирають масив, тобто працюють за O(n). Якщо перевірок багато (наприклад, у циклі по іншому масиву), краще один раз побудувати Set чи Map:
const allowed = new Set(roles);
items.filter((item) => allowed.has(item.role)); // has - O(1)