Bonjour,
Je sais que c'est temps-ci, j'ai tendance à très peu publier de codes et lorsque je le fais, il s'agit toujours de petits codes/astuces. Je m'en excuse, mais c'est encore le cas. Je travaille toujours à de gros projets (actuellement un éditeur javascript), et je trouve souvent ces petits codes durant ces longues périodes de codage. Je promets donc que la prochaine sources que je vais poster sera cet éditeur.
Donc, je reviens ici avec une nouvelle implémentation de "Array.indexOf". Si vous ne savez pas ce que je fais cette fonction, voici le lien MDC (en anglais désolé. Et s'il y a espaces dans l'adresse, supprimez-les) :
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf
Ce qu'a mon implémentation de particulier ? Une absence de boucle. Je vais bientôt faire des tests de vitesse, et je vous reviendrai avec les résultats.
EDIT : Après résultat, ma fonction est beaucoup plus lentes que les implémentations de MDN, de JQuery ainsi que la fonction native. Le test est dans le ZIP
Source / Exemple :
Array.prototype.indexOf = function(w, n) {
n = n || 0;
var a = String.fromCharCode(10e5);
var s = [a, this.slice().splice(n).join(a), a].join("");
var j = s.indexOf([a, w.toString(), a].join(""));
if (j < 0) {
return -1;
}
return s.substring(0, j).split(new RegExp(a)).length - 1 + n;
}
/*
Syntaxe
Number Array.indexOf(String Terme, Number Début);
@Terme : Le terme à rechercher dans l'Array. Il faut qu'un des éléments de l'Array soit identique à Terme pour que cela fonctionne.
@Début (Optionnel) : Indique l'index de l'Array où démarrer la recherche
Retourne l'index où la valeur a été trouvé. Retourne -1 sinon.
//Exemple
["b", "c"].indexOf("b"); // 0
["b", "c"].indexOf("b", 1); // -1
// Version compressée
Array.prototype.indexOf=function(w,n){n=n||0;var a=String.fromCharCode(10e5);var s=[a,this.slice().splice(n).join(a),a].join("");var j=s.indexOf([a,w.toString(),a].join(""));if(j<0){return-1}return s.substring(0,j).split(new RegExp(a)).length-1+n}
// Le ZIP contient un speed test
Conclusion :
Je crois tout de même qu'il reste un intérêt à cette fonction, c'est-à-dire une implémentation vraiment différente de celles qu'on voit normalement.
Laissez des commentaires et dites-le moi s'il manque quelque chose à mon implémentation !
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.