The Array.prototype.every() method is a logical operator used to test whether all elements in an array pass a specific condition. It returns a Boolean value: true if the callback function returns a truthy value for every array element, and false otherwise.
Think of it as the strict counterpart to some(). While some() looks for at least one match (an OR logic), every() demands total compliance (an AND logic).
1. Syntax
The method accepts a callback function (the predicate) and an optional thisArg for execution context.
JavaScript
2. Practical Use Cases
A. Form and Data Validation
every() is the standard tool for ensuring that a dataset is “clean” or complete before proceeding with an operation, such as checking if all required fields in a form are filled.
const surveyResponses = [
{ question: "Name", value: "John" },
{ question: "Age", value: "30" },
{ question: "Email", value: "" } // Missing value
];
const isComplete = surveyResponses.every(field => field.value.length > 0);
console.log(isComplete); // false
B. Type Checking
When receiving data from an external API, you can use every() to verify that the data matches your expected format before attempting to process it.
const coordinates = [[10, 20], [5, 12], [8, "9"]];
// Ensure every coordinate pair consists of two numbers
const isValid = coordinates.every(coord =>
coord.length === 2 && coord.every(val => typeof val === 'number')
);
console.log(isValid); // false
3. Advanced Patterns and Nuances
Complex Conditionals
You can use every() to enforce business rules across related datasets. For example, checking if a user has all the required permissions for a specific action.
const userPermissions = ['READ', 'WRITE', 'DELETE'];
const requiredForAction = ['READ', 'WRITE'];
const canPerformAction = requiredForAction.every(p => userPermissions.includes(p));
Treatment of Sparse Arrays
every() does not run the callback for “holes” (indices that have never been assigned a value) in sparse arrays. It simply skips them.
const sparseArray = [1, , 3];
// Callback runs for 1 and 3, but skips index 1.
console.log(sparseArray.every(x => x > 0)); // true
4. Interaction with Arrow Functions
When using every() with arrow functions, remember that if you use curly braces {}, you must include an explicit return statement. Forgetting the return will cause the function to return undefined (which is falsy), resulting in every() returning false immediately.
// ❌ WRONG: Missing return inside braces
const fail = [true, true].every(val => { val === true }); // false
// ✅ RIGHT: Implicit return
const pass = [true, true].every(val => val === true); // true
5. Real-World Use Case: Permission Sets
In complex applications, a user might need to pass multiple permission checks to see a specific UI component. every() allows you to check a list of requirements dynamically.
const userPermissions = ['READ_PRIVILEGES', 'WRITE_PRIVILEGES'];
const requiredForDelete = ['READ_PRIVILEGES', 'WRITE_PRIVILEGES', 'DELETE_PRIVILEGES'];
const canDelete = requiredForDelete.every(p => userPermissions.includes(p));
if (!canDelete) {
console.log("Access Denied: You lack the necessary permissions.");
}
