Array.indexof (implémentation différente)

Soyez le premier à donner votre avis sur cette source.

Vue 2 241 fois - Téléchargée 147 fois

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

Ajouter un commentaire

Commentaires

xactise
Messages postés
507
Date d'inscription
mardi 18 février 2003
Statut
Membre
Dernière intervention
22 juin 2012
2 -
Très sympas en effet un test d'execution serais sympas !

cependant comment sais-tu qu'il font une boucle dans la methode actuel ? je n'ai pas vu l'information dans le lien que tu donne.

Merci
xactise
Messages postés
507
Date d'inscription
mardi 18 février 2003
Statut
Membre
Dernière intervention
22 juin 2012
2 -
Oups autant pour moi cette methode n'existe pas sur des tableau mais sur du string autant pour moi ^^

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.