JavaScript array search methods check whether a value exists or locate the first matching item using a callback test. Picking the right method keeps loops short and prevents comparing object references by mistake.
Use value-based methods for primitives (string, number) and callback predicate methods for arrays of objects:
includes(val): Returns true or false if a primitive value exists in the array (even handles NaN properly).indexOf(val) / lastIndexOf(val): Returns the matching index or -1 if missing.find(fn) / findLast(fn): Returns the first (or last) item where callback fn returns true, or undefined if none match.findIndex(fn): Returns the index of the first matching element, or -1 if not found.Notice how find() locates an object by its id property, while some() checks whether any item meets a condition.
const roles = ["viewer", "editor", "admin"];
console.log("Has admin:", roles.includes("admin"));
const users = [
{ id: 101, name: "Lina", active: true },
{ id: 102, name: "Omar", active: false },
{ id: 103, name: "Tariq", active: true },
];
const targetUser = users.find((u) => u.id === 102);
const lastActive = users.findLast((u) => u.active);
const hasInactive = users.some((u) => !u.active);
console.log({ targetUser, lastActive, hasInactive });
includes() to search for objects: [{ id: 1 }].includes({ id: 1 }) returns false because two separate { id: 1 } literals have different memory references. Use some() or find().filter()[0] when you only need one match: filter() scans the entire array and allocates a new array. find() stops immediately on the first match.find() can return undefined: Always check if (user) or use optional chaining user?.name before reading properties on the result.some() and every()?some() returns true as soon as at least one element passes the callback test. every() returns true only if all elements pass the test.
Use array.filter(item => condition) whenever you want an array containing every element that matches your rule.
includes() work with NaN?Yes, [1, NaN, 3].includes(NaN) returns true, whereas [1, NaN, 3].indexOf(NaN) returns -1.
Sign in to track your learning journey, earn industry-recognized certificates, and join our elite developer community.
Quick Access With
Experiment with the code from this lesson in our interactive playground.