Simplifiez votre JavaScript, utilisez some() et find()

.some()

Cette méthode de tableau vous aide à déterminer si une ou plusieurs de ses valeurs correspondent à quelque chose que vous recherchez. Si cela ne vous semble pas clair, laissez-moi vous l'illustrer avec un exemple…

Voici une liste d'agents travaillant pour votre organisation ultra-secrète :

 var operatives = [ { id: 12, name: 'Baze Malbus', pilot: false }, { id: 44, name: 'Bodhi Rook', pilot: true }, { id: 59, name: 'Chirrut Îmwe', pilot: false }, { id: 122, name: 'Jyn Erso', pilot: false } ]; 

Vous voulez savoir s'il y a des pilotes parmi vos agents. Il existe de nombreuses façons d'atteindre cet objectif. La plupart des gens utiliseront probablement .forEach() et feront quelque chose comme ceci :

 var listHasPilots = false;operatives.forEach(function (operative) { if (operative.pilot) { listHasPilots = true; } }); 

Cela fait beaucoup de lignes juste pour voir si la liste contient un pilote. Essayons d'utiliser .some() !

 var listHasPilots = operatives.some(function (operative) { return operative.pilot; }); /* Nous pouvons même être plus concis avec les fonctions fléchées (ES6, Babel ou TypeScript) */ const listHasPilots = operatives.some(operative => operative.pilot); 

Comment ça marche ?

Eh bien, vous passez à .some() une fonction comme argument. Cette fonction s'exécute pour chaque valeur du tableau. Vous pouvez alors voir si la valeur correspond à la condition que vous avez écrite. La fonction doit renvoyer un booléen (bien qu'une valeur truey/falsy fonctionne également). Dès qu'une valeur true est renvoyée, .some() renvoie elle-même true. Si aucune des valeurs, lorsqu'elles sont traitées dans votre condition, ne renvoie true (si elles renvoient toutes false), alors .some() renvoie false.

Notez que dès qu'une seule valeur true est renvoyée, .some() arrête de vérifier les autres valeurs du tableau. Dans notre exemple ci-dessus, la fonction ne s'exécute que deux fois car le deuxième agent, Bodhi Rook, est un pilote. Pas besoin de vérifier les autres pilotes.

Si certaines de vos valeurs de tableau correspondent à ce que vous recherchez, .some() renvoie true. Sinon, il renvoie false.

.find()

Cette méthode de tableau fait exactement ce qu'elle dit : elle trouve ce que vous cherchez. En un mot, .find() renverra la première valeur qui correspond à la condition passée. Voyons-la en action avec les mêmes données que précédemment.

C'est la même chose que précédemment, sauf que cette fois au lieu de se demander si nous avons un pilote dans nos rangs, nous voulons le profil de ce pilote ! Sortons la valeur dont nous avons besoin en utilisant .find() :

 var firstPilot = operatives.find(function (operative) { return operative.pilot; }); /* avec les fonctions fléchées (ES6..) */ const firstPilot = operatives.find(operative => operative.pilot); 

Comme vous pouvez le voir, le code est exactement le même qu'avec .some() , la seule différence est que nous avons remplacé some par find ! Mais maintenant, au lieu de renvoyer un booléen, il renverra le premier pilote de notre liste.

Je tiens à souligner que .find() renverra la première correspondance. Si plusieurs valeurs correspondent à votre condition, cela n'aura pas d'importance. Seule la première correspondance sera renvoyée. Si vous avez besoin d'une liste de toutes les correspondances, vous devez utiliser .filter() au lieu de .find() .

Si aucune correspondance n'est trouvée, .find() renverra undefined .

Avantages

L'utilisation de .find() et .some() au lieu de boucles courantes comme .for() ou .forEach() non seulement rend votre code plus court, mais rend également votre intention plus claire. Une boucle peut être utilisée pour faire n'importe quoi, mais l'utilisation de .find() indique que vous recherchez un élément de tableau particulier. Quant à .some() , vous vérifiez clairement si le tableau contient des éléments qui correspondent à vos besoins ou non.

Rendez votre code plus clair ! Utilisez .find() et .some() lorsque cela est pertinent.