JS: Tableau.la carte ne pas ajouter à la matrice
J'ai des données que je voudrais transformer en utilisant des Array.prototype.map
. Cependant, dans la fonction map il y a une chance, une erreur est générée par une fonction externe appel. J'aimerais rattraper cette erreur et de ne pas ajouter à cet objet particulier pour le tableau retourné. Actuellement, je suis juste de retour indéfini, puis en utilisant Array.prototype.filter
pour effacer les valeurs indéfinies, mais cela semble être une sale façon de le faire.
De préciser, je suis à la recherche de cette fonctionnalité:
['apple','pear','banana', 'peach'].map(function(fruit){
if (fruit === 'apple') {
return undefined;
}
return 'I love to eat ' + fruit;
});
//['I love to eat pear', 'I love to eat peach', 'I love to eat banana']
Existants implementatons de cela? Suis-je tout simplement les choses à ce sujet dans le mauvais sens?
Votre lien est à la jQuery
.map()
méthode, et non la méthode Javascript.OriginalL'auteur jtmarmon | 2014-11-24
Vous devez vous connecter pour publier un commentaire.
Un moyen plus lisible;
Alors que cela fonctionne pour son exemple de code, il ne semble pas comme il va travailler pour la vraie chose. Il dit qu'il est l'appel d'une fonction qui permet de signaler une erreur, et c'est le cas, il veut filtrer.
Pouvez-vous vérifier l'erreur avant l'appel de la fonction dans
.map()
?J'espère que cette aide, si vous pouvez fournir tout autre code dans ce qui est à l'origine de l'erreur, je pense que je pourrais être en mesure de modifier ma réponse!
Si l'OP est de faire un asynchrones appel externe alors je ne pense pas que l'aide que l'utilisation de
.map
et.filter
est la bonne façon d'aller. Si c'est le cas, je suggère d'avoir un coup d'oeil à async bibliothèqueOriginalL'auteur Renato Gama
J'ai fini par fusionner les deux méthodes en même temps dans un sur le
Array
prototype. @Benmj mentionné, vous pourriez bien mettre cela dans un utilitaire de personnalisation lib.OriginalL'auteur jtmarmon
Comme cela a été dit dans les commentaires, vous devez combiner cela avec un filtre. Heureusement, c'est facile parce que vous pouvez enchaîner les méthodes de tableau:
mise à jour
L'un des locataires de la programmation fonctionnelle, comme ce est que vous créer des blocs de construction simples qui n'ont pas d'effets secondaires. Ce que l'OP est décrit est essentiellement l'ajout d'un effet secondaire à
.map
, et ce type de comportement doit être découragé.Il l'a fait. Il a également déclaré qu'il "se sent sale." Il ne devrait pas. 🙂
bon point. c'est ce que la carte devrait le faire. au lieu de cela je vais mettre en œuvre une nouvelle méthode de
Array.prototype
que magiquement combine les deuxMais votre approche générale de la fabrication d'une nouvelle fonction composée de ceux existant est totalement solide.
Ce serait encore plus lisible:
.map(toSomething).filter(outUndefined)
si vous définisseztoSomething
etoutUndefined
comme des fonctions séparément quelque part 🙂OriginalL'auteur Benmj
La réponse ci-dessus peut être encore réduite.
Cet extrait de code, peut en fait être encore plus réduite. Toujours éviter de pousser en un tableau, si vous pouvez l'omi.
OriginalL'auteur user3619165