Différence entre find() et filter().shift () sur javascript
j'ai récemment commencé à laisser tomber underscore/lodash abuser de (certains) mes projets et réaliser qu'il n'y a pas de soutien total de trouver méthode dans les navigateurs. Quelle est la différence entre la méthode ES6 trouver et l'utilisation .maj() sur filtre résultats
var user = users.find(function() { ... } );
ou
var user = users.filter(function() { ... } ).shift();
j'imagine qu'il y a une optimisation évidente sur la méthode "find" (stop iterating on fist match), mais puis-je obtenir des résultats inattendus en utilisant la seconde approche? Dois-je utiliser le polyfill à la place? Pourquoi?
2 réponses
mis à part les frais généraux évidents (et perceptibles), Oui, les résultats peuvent varier. filter
fonctionne jusqu'à la fin du tableau, et invoque son rappel sur chaque élément; en contraste avec find
qui s'arrête après avoir trouvé un. Lorsque le callback lance une exception sur l'un de ces éléments itérés supplémentaires, le résultat est différent.
Je ne vois aucune bonne raison de ne pas utiliser find
.
un polyfill;users.filter(function() { ... } ).shift();
jette les cycles tout en déclenchant la collecte inutile des ordures.
filter
scanne tout le tableau et crée un autre tableaushift
doit maintenant changer tous les indices sur le tableau temp
un schéma un peu moins gaspilleur serait d'utiliser users.filter(function() { ... } )[0]