Maison >interface Web >js tutoriel >Pourquoi « forEach » renvoie-t-il « undefined » même avec une instruction « return » à l'intérieur de la fonction d'itération ?

Pourquoi « forEach » renvoie-t-il « undefined » même avec une instruction « return » à l'intérieur de la fonction d'itération ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-10 09:28:03235parcourir

Why Does `forEach` Return `undefined` Even With a `return` Statement Inside the Iteration Function?

Dépannage des retours non définis dans les fonctions utilisant forEach

Certaines fonctions, lorsqu'elles sont utilisées avec la méthode forEach, peuvent renvoyer un résultat indéfini malgré l'inclusion d'un retour déclaration. Ce comportement se produit car l'instruction return affecte la fonction d'itération transmise à forEach, plutôt que la fonction englobante elle-même.

Exemple de code :

Considérez la fonction suivante :

def get_by_key(key):
    data.forEach(function(i, val):
        if data[val].Key == key:
            return data[val].Key
        else:
            return "Couldn't find"
    )

Lorsque vous appelez cette fonction, vous pouvez vous attendre à ce qu'elle renvoie la valeur de la clé dans le tableau de données, mais elle renvoie systématiquement undéfini. En effet, l'instruction return se trouve à l'intérieur de la fonction d'itération, ce qui n'affecte pas la valeur de retour de get_by_key.

Solution :

Il existe deux manières principales de résoudre ce numéro :

1. Utiliser une fermeture :

def get_by_key(key):
    found = None
    data.forEach(function(val):
        if val.Key == key:
            found = val
    )
    return found

Dans cette solution, nous créons une fermeture en déclarant la variable trouvée en dehors de la fonction d'itération. Cela nous permet de renvoyer la valeur sans affecter la fonction d'itération.

2. Utilisation d'une boucle for :

def get_by_key(key):
    for i in range(len(data)):
        if data[i].Key == key:
            return data[i]

Pour les ensembles de données plus petits, une simple boucle for peut être plus efficace que l'utilisation de forEach. Il parcourt le tableau de données et renvoie la valeur trouvée.

Considérations supplémentaires :

  • Au lieu de renvoyer la clé, vous souhaiterez peut-être renvoyer la valeur complète de l'objet correspondant à la clé.
  • L'utilisation de l'instruction break dans la fonction d'itération peut améliorer les performances, car elle quitte la boucle plus tôt lorsque la clé est trouvé.

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!

Déclaration:
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