Array.some() en JavaScript : savoir si au moins un élément passe le test

some rend vrai dès qu'un élément passe le test et s'arrête là : son couple avec every, le cas du tableau vide et le choix face à includes.
3 min de lecture
Believemy logo

Le panier contient-il un article en rupture ? Un des champs du formulaire est-il vide ? Ces questions attendent un oui ou un non, pas une liste.

some répond exactement à cette forme de question, et arrête son parcours dès qu'il a de quoi répondre.


Définition

some est une méthode d'Array (tableau) qui rend true dès qu'un élément passe le test, et false si aucun ne passe. Son opposé, every, rend true seulement si tous passent.

JAVASCRIPT
const panier = [
  { nom: "clavier", stock: 0 },
  { nom: "souris", stock: 4 },
];

console.log(panier.some((a) => a.stock === 0));   // true
console.log(panier.every((a) => a.stock > 0));    // false

La fonction reçoit les trois arguments habituels, l'élément, son index et le tableau complet, les deux derniers servant rarement. Comme pour Array.filter(), son retour n'a pas besoin d'être un booléen : sa nature Truthy et falsy suffit à trancher.


L'arrêt anticipé

Le parcours cesse au premier succès, ce qui compte sur un test coûteux ou un tableau long.

JAVASCRIPT
const vus = [];

[1, 2, 3, 4, 5].some((n) => {
  vus.push(n);
  return n > 2;
});

console.log(vus);   // [ 1, 2, 3 ]

Trois éléments visités sur cinq. every suit la règle symétrique : il s'arrête au premier échec, puisqu'un seul suffit à condamner l'ensemble.


Le cas du tableau vide

C'est le comportement qui surprend le plus, et il est parfaitement logique une fois posé dans le bon sens.

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

some cherche un exemple et n'en trouve aucun, il répond donc non. every cherche un contre-exemple et n'en trouve aucun non plus, il répond donc oui. Un test du genre « tous les champs sont remplis » vaut ainsi true sur un formulaire sans champ, ce qui mérite souvent une vérification de la longueur en amont.


Questions fréquentes

Question

some ou includes ?

includes cherche une valeur précise et compare avec l'Égalité stricte (===), ce qui le limite aux nombres, chaînes et booléens. Sur des objets il échoue toujours, sauf à comparer la même référence. Dès qu'il y a un critère, c'est some qu'il faut.

Question

Comment écrire l'inverse de every ?

Par some avec le test inversé : « tous positifs » est faux exactement quand « au moins un négatif ou nul » est vrai. Cette réécriture évite un ! posé devant un appel entier, que l'œil saute une fois sur deux, et elle dit en clair ce que le test cherche vraiment.

Question

some est-il plus rapide que Array.filter() ?

Pour répondre à une question par oui ou non, oui, et souvent nettement. filter parcourt tout le tableau et construit un résultat dont on ne lira que la longueur, alors que some s'arrête au premier élément qui convient.

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.