11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

j'ai un tableau, je teste la library prototypes.js qui rajoute des prototypes à "array".
résultat, en créant un nouveau tableau, il n'est pas vide, et donc en le parcourant apres avoir mis des valeurs j'ai mes valeurs + les prototypes dedans, ce qui n'est pas pratique (tableau associatif)

comment faire pour n'avoir que les valeurs que j'ai rajouté ?

exemple:

var mon_tab = new Array();
mon_tab['un'] = 'val. de un';

for(var cle in mon_tab) {
  alert('cle= ' + cle + '  / valeur= ' + mon_tab[ cle ]);
}



si maintenant je rajoute en "include" prototype.js ben j'ai les prototypes dans les 'alert' !
Y a un truc que je dois rater je suppose... une aide serait la bienvenue...

merci beaucoup Smiley confused
Modifié par tompouce (23 Aug 2006 - 10:25)
En quoi tu utilises prototype dans ton exemple ??
As tu essayer qqchose comme ca :

$A(tab).each(mafunction);


$A convertis un tableau en object

Qu'entends tu pars 'ajoute des prototypes' ?? methodes tu veux dire ?
nORKy a écrit :
En quoi tu utilises prototype dans ton exemple ??

je ne l'utilise pas... mais dès que j' "include" la librarie prototype.js
le code que j'ai ecrit ne marche plus, enfin ne me renvoit pas la même chose.
Donc je me demande comment parcourir mon tableau alors que prototype.js est chargé et de n'avoir que les valeurs que je veux, et non pas les valeurs + les prototypes ajoutés à Array.

nORKyy a écrit :

$A(tab).each(mafunction);


non je n'ai pas essayé car je découvre prototypes.js
en faisant cela j'obtiens quoi exactement, et comment l'exploiter, comment retrouver toutes mes valeurs et que mes valeurs mises dans le tableau ?

merci en tout cas
Administrateur
Bonjour,

merci de placer le code de ton message entre balises [ code] ... [ /code] (sans les espaces) comme demandé dans l'Aide de ce Forum, et ce en éditant ton message: cela le rendra plus lisible pour tout le monde.

Felipe
EST_CE QUE prototype.js contient des instructions comme : Array.prototype.fonction = function (...) {...} ?

Si oui, tu peux peut-être essayer d'ajouter une condition à ta boucle for-in :

for (var key in anArray) {
var value = anArray[ key ];
[b]if (typeof(value)=="function") continue;[/b]
alert("" + key + " = " + value);
}
Pour utiliser une librairie, il faudrait regarder ce qu'elle fait
Bon, je sais, meme en fouinant sur le net, c'est super dur d'avoir de la doc sur cette fameuse lib
voici un lien (en anglais) http://www.sergiopereira.com/articles/prototype.js.html
Tu devrais également facilement trouver une image qui réprésente tous les objets, propriétés et methodes que fourni prototype

bon, j'essai de reprendre ce que j'ai dit
la fonction $A permet de convertir un tableau en un objet
l'avantage d'un objet est qu'on peut y applique appliqué une de ces methodes.
prototype.js donne une fonction de parcour de propriétés qui s'apelle each. Cette fonction applique une fonction utilisateur sur tous les propriétés d'un objet
Donc, le code que j'ai donné, permet donc d'appliqué une fonction sur tous les elements de ton tableau.
Tu devrais trouver des exemples dans le lien que je t'ai donné.

A force de l'utiliser, tu devrais vite devenir dépends de certaines fonction comme $
Merci pour le lien sur la documentation de prototypes.js !
Effectivement cette librairie est vraiement bien foutu, sert de base pour beaucoup d'autres librairies mais la documentation est quasi inexistante sur le site de l'auteur (ou alors je n'ai pas trouvé ?!)

J'avoue trouvé cela tres surprenant que le fait que parcourir un tableau de maniere traditionnelle ne soit plus possible suite à l'ajout de fonctions prototype sur array (j'espere parler correctement..)
et du coup je me posais pas mal de questions existentielles (suis je le seul a trouvé ca bizarre, pourquoi personne n'en parle, etc...)

en tout cas merci de vos réponses
(désolé pour le mauvais usage de [ code ] )
réflexion d'hier sur developpez.net:

<script type="text/javascript">

var tab = new Array();

tab['un'] = 'val. de un';
tab['un'] = 'val. de un'; // définition doublée volontairement
tab['deux'] = 'val. de deux';
tab['deux'] = 'val. de trois'; // redéfinition volontaire
tab[44] = 'val. de 44'; // indice numérique



function tabinfo(){
	var lg=0;
	var lignes="";

	for (ind in this){
		if(this.hasOwnProperty(ind)){	
			// seules les propriétés uniques 
			// et non héritées seront retenues
			lg++;
			lignes+='cle: ' + ind + ' ==> valeur: ' + this[ ind] + "\n";
		}
	}
	
	return  "ce tableau contient " + lg + " lignes:\n\n" + lignes;
}

Array.prototype.info=tabinfo;


alert( tab.info())

</script>