IndexOf élément dans le tableau à l'aide d'une vérité de la fonction en utilisant le trait de soulignement ou jquery
J'ai besoin fondamentalement les mêmes fonctionnalités que le trait de Soulignement est trouver mais avec l'index de l'élément (et pas l'élément lui-même).
Autant que je sache, le trait de Soulignement est indexOf recherche une valeur et ne prennent pas une fonction. Même problème pour jQuery inArray fonction.
Je suis venu avec la suite de la mise en œuvre, mais je ne suis pas sûr que c'est la plus efficace:
function myIndexOf(arr, filter) {
var index;
$.each(arr, function (i, elt) { if (filter(elt)) { index=i; return false; } });
return index;
}
OriginalL'auteur nakhli | 2011-11-01
Vous devez vous connecter pour publier un commentaire.
Ici est une simple mise en œuvre:
Il va travailler sur tout indexables objet qui a une longueur de propriété, et vous pouvez passer d'un filtre complexe fonction de la forme
filter(element, index, collection)
(paramètres optionnels).OriginalL'auteur Luc125
_.findIndex
est disponible dans Lo Tableau De Bord et Underscore.js:Oh, n'est-ce pas le vérifier, merci. Alors pas la même.
OriginalL'auteur Paolo Moretti
Trait de soulignement utilise la mise en œuvre suivants:
Cela appelle,
_.any
, qui appelle_.each
, qui appelleArray.prototype.forEach
. L'efficacité n'est pas exactement le nom du jeu. Il s'agit plus d'utilité.Si vous savez pour un fait que vous êtes face à un tableau ou d'une matrice (comme l'objet, vous pouvez utiliser @Thor84no solution et simplement parcourir le tableau jusqu'à ce que votre filtre condition est remplie. Si non, et vous avez peut-être affaire à des objets aussi bien, je voudrais simplement réécrire _.trouver que _.findIndex et l'utilisation
result = index;
._.indexOf
objectifs d'efficacité et utilise une recherche binaire ou le natifArray.prototype.indexOf
fonction. Cela signifie qu'ils ne peuvent pas utiliser les arguments de la fonction. Avec_.find
, vous êtes déjà en train de planifier d'avoir beaucoup d'appels de fonction, de sorte que trois de plus?OriginalL'auteur Brian Nickel
Vous pouvez simplement utiliser une variable locale pour obtenir de cette façon:
Alto. Vous avez obtenu l'indice ET la valeur correspondante. Si l'itérateur atteint la fin, l'indice va de -1, et si vous frappez un match, il court-circuits sur l'indice.
OriginalL'auteur Joel
Il serait plus efficace de faire la boucle de vous-même et utiliser
break;
(oureturn
) pour sortir de la boucle une fois que vous avez trouvé l'index.for ... in
pour parcourir un tableau n'est pas une bonne idée. Veuillez utiliserfor(var i = 0; ... )
. En fait, c'est encore plus rapide, et aussi des travaux sur les DOM collections.Vrai, j'étais juste trop pressé lors de l'écriture. Merci. D'autre part
for ... in
travaille aussi pour trouver des correspondances dans les objets (doit être utilisé avec précaution bien sûr).OriginalL'auteur Thor84no