Dans les situations où vous devez parcourir des structures de données imbriquées de manière récursive et exécuter une opération pour chaque élément, vous pouvez utiliser un combinaison de récursivité et forEach. Cependant, il peut y avoir des cas où vous devrez quitter prématurément la boucle forEach.
Contrairement à une boucle normale avec des instructions break ou continue, forEach ne dispose pas d'un mécanisme intégré pour arrêter son itération. Pour simuler ce comportement, explorons trois approches :
1. La manière "laid" : utiliser un booléen contextuel
Passez un deuxième argument à forEach comme contexte et stockez-y une valeur booléenne. Dans la fonction de rappel, vérifiez le booléen et éclatez-le si nécessaire. Cette approche est visuellement peu attrayante.
<code class="javascript">function recurs(comment) { var stop = false; comment.comments.forEach(function (elem) { recurs(elem); if (...) stop = true; }, stop); }</code>
2. La méthode « controversée » : gestion des exceptions
Insérez la boucle forEach dans un bloc try-catch. Lorsque vous souhaitez interrompre, lancez une exception et interceptez-la en dehors de la boucle. Cette approche peut avoir un impact sur les performances et soulever des inquiétudes quant à la lisibilité du code.
<code class="javascript">try { comment.comments.forEach(function (elem) { recurs(elem); if (...) throw new Error("Stop Iteration"); }); } catch (e) { if (e.message === "Stop Iteration") return; }</code>
3. La méthode « amusante » : utiliser each()
every() est une meilleure option. Il continue à parcourir la collection jusqu'à ce que la fonction de rappel renvoie false. Cela agit efficacement comme une instruction break.
<code class="javascript">comment.comments.every(function (elem) { recurs(elem); if (...) return false; return true; });</code>
Vous pouvez également utiliser some() au lieu de each() si vous préférez retourner true pour break.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!