Renvoie un dilemme non défini : dévoiler le mystère derrière les fonctions et les itérations de tableaux
Dans le domaine de la programmation, une énigme courante surgit lors de l'utilisation de fonctions et itérations du tableau. Même si une instruction return est souvent utilisée, le résultat peut encore être indéfini. Pour découvrir les raisons de ce problème déroutant, explorons un cas spécifique impliquant une fonction appelée getByKey qui tente de récupérer un objet d'un tableau en fonction d'une clé.
L'énigme
La fonction getByKey, destinée à rechercher un objet dans un tableau d'objets, renvoie systématiquement undéfini. Malgré la présence d'une instruction return dans sa fonction de rappel interne, ce comportement énigmatique a dérouté les développeurs.
Exploration de la résolution
Après enquête, il devient évident que l'instruction return L'instruction est exécutée dans la fonction de rappel fournie à la méthode forEach, ce qui n'est pas la même chose que le retour de la fonction getByKey elle-même. Pour résoudre ce problème, nous pouvons soit modifier le code pour utiliser la méthode map au lieu de forEach, soit opter pour une boucle for traditionnelle, qui offre plus de contrôle sur le processus d'itération.
Code optimisé avec Map
En utilisant la méthode map, nous transformons le tableau en un nouveau tableau contenant les résultats souhaités. Pour chaque élément du tableau d'origine, nous appliquons la fonction de rappel, qui recherche la clé et renvoie l'objet correspondant.
function getByKey(key) { return data.map(function (val) { if (val.Key === key) { return val; } }).filter(function (val) { return val !== undefined; })[0]; }
Solution simplifiée avec boucle For
Pour une plus grande efficacité, nous pouvons utiliser une boucle for pour parcourir les éléments du tableau. Cette approche offre un contrôle direct sur la boucle et nous permet d'éclater immédiatement lorsque l'objet correspondant est trouvé.
function getByKey(key) { for (var i = 0; i < data.length; i++) { if (data[i].Key === key) { return data[i]; } } }
Comprendre la subtilité
Il est crucial de noter que la fonction de rappel dans forEach ne revient pas directement de la fonction conteneur. L'instruction return dans le rappel affecte l'exécution du rappel lui-même, mais pas le flux d'exécution de la fonction englobante. Par conséquent, il est essentiel de réfléchir attentivement à l'emplacement des instructions return lorsque vous travaillez avec des fonctions d'itération de tableau.
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!