Array.every() en JavaScript : vérifier que tous les éléments passent un test

every rend vrai quand chaque élément d'un tableau passe le test. Il s'arrête au premier échec, et répond vrai sur un tableau vide.
3 min de lecture
Believemy logo

Valider un formulaire avant l'envoi, refuser une commande tant qu'une ligne est en rupture, autoriser une publication quand tous les champs obligatoires sont remplis : la question posée est toujours la même, est-ce que tous les éléments respectent la règle.

every y répond par vrai ou faux, sans compteur ni drapeau à gérer soi-même.


Définition

every est une méthode d'Array (tableau) qui appelle une fonction sur chaque élément et rend true uniquement si cette fonction a répondu vrai partout. Un seul élément qui échoue suffit à obtenir false.

JAVASCRIPT
const champs = [
  { nom: "email", rempli: true },
  { nom: "motDePasse", rempli: true },
  { nom: "conditions", rempli: false },
];

console.log(champs.every((c) => c.rempli));   // false
console.log(champs.some((c) => c.rempli));    // true

const langues = ["fr", "en", "es"];
console.log(langues.every((l) => l.length === 2));  // true

Le retour est toujours un booléen, jamais l'élément fautif. Il se pose donc directement dans un if, et c'est ce qui distingue every de Array.find(), qui rend l'élément lui-même.


L'arrêt au premier échec

La fonction n'est pas appelée sur tous les éléments : dès qu'une réponse est fausse, le parcours s'interrompt, puisque le verdict ne peut plus changer.

JAVASCRIPT
let appels = 0;

const tousPositifs = [1, 2, -3, 4, 5].every((n) => {
  appels += 1;
  return n > 0;
});

console.log(tousPositifs);  // false
console.log(appels);        // 3, les valeurs 4 et 5 n'ont pas été examinées

Deux conséquences pratiques. Placer en tête le test le plus susceptible d'échouer accélère la réponse sur les gros tableaux. Et surtout, la fonction ne doit produire aucun Effet de bord : compter, journaliser ou incrémenter à l'intérieur d'un every donne un résultat qui dépend de l'endroit où le parcours s'est arrêté.


Le cas du tableau vide

every rend true sur un tableau vide. Ce n'est pas un défaut : aucune règle n'a été enfreinte, puisque aucun élément n'a été examiné. La surprise arrive en production.

JAVASCRIPT
console.log([].every((n) => n > 100));  // true
console.log([].some((n) => n > 100));   // false

const panier = [];
const commandable = panier.every((ligne) => ligne.stock > 0);
console.log(commandable);  // true, alors qu'il n'y a rien à commander
Bon à savoir

La parade tient en une condition de plus : panier.length > 0 && panier.every(...). Écrivez-la dès que la liste peut arriver vide, ce qui est le cas de presque toute donnée venue d'une base.


Questions fréquentes

Question

Quelle différence avec Array.some() ?

Les deux rendent un booléen, mais ne posent pas la même question. every demande si tous passent, Array.some() si au moins un passe. Le premier s'arrête au premier échec, le second au premier succès. Sur un tableau vide, le premier rend true et le second false.


Question

Peut-on interrompre un every en cours de route ?

Il s'interrompt déjà de lui-même au premier échec, et break n'a aucun effet à l'intérieur d'une fonction. Si vous avez besoin de savoir quel élément a fait échouer le test, Array.find() rend cet élément et findIndex rend sa position.


Question

Comment vérifier que deux tableaux contiennent les mêmes valeurs ?

En comparant d'abord les longueurs, puis chaque position : a.length === b.length && a.every((v, i) => v === b[i]). Le deuxième argument reçu par la fonction est l'index, ce qui rend la comparaison possible. Cela ne vaut que pour des valeurs simples : deux objets au contenu identique restent différents pour l'Égalité stricte (===).

Termes connexes

Découvrez notre glossaire JavaScript

Tous les mots de JavaScript expliqués simplement : mots-clés, objets natifs, méthodes, erreurs et concepts. Définitions claires et exemples qui tournent, pour apprendre et pour se dépanner.

Partager cet article

Tu veux nous aider ? Fais un lien vers cet article sur tes réseaux ou encore mieux : sur ton site, dans un article ou dans ta newsletter.