Array.indexof (implémentation différente)

Description

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 !

Codes Sources

A voir également

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.