Maison > interface Web > js tutoriel > Pourquoi ma fonction renvoie-t-elle un résultat non défini lors de l'utilisation d'itérations de tableau ?

Pourquoi ma fonction renvoie-t-elle un résultat non défini lors de l'utilisation d'itérations de tableau ?

Mary-Kate Olsen
Libérer: 2024-11-13 08:12:02
original
415 Les gens l'ont consulté

Why Does My Function Return Undefined When Using Array Iterations?

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];
}
Copier après la connexion

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];
        }
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal