11548 sujets

JavaScript, DOM et API Web HTML5

Slt tlm,

j'ai un petit probleme lorsque je veux imbriquer des tableaux ensembles.
function init(){

	minis = getElementsByClass("mini", "div");
	position = new Array();
	
	for (i=0;i<minis.length; i++) {
		
		var pos = findPos(minis[i ]);
		var x = pos.x;
		var y = pos.y;
		//position = Array(i => Array("x" => Array(x, x + minis[i ].offsetWidth), "y" => Array(y, y + minis[i ].offsetHeight)));
		position[i ]["x"] = Array(x, x + minis[i ].offsetWidth);
		position[i ]["y"] = Array(y, y + minis[i ].offsetHeight);
		
	}
	print_r(position);

}


La fonction "init" est utilisé au chargmenent de la page.
J'ai essayé deux types de notations. Dans le premier, la console me dit que le signe "=>" n'existe pas (c'est pas comme en PHP?). Dans le deuxieme cas, ca me dit que "position[i ]" n'a pas de propriétés.


Merci bp!
+++
Modifié par maxroucool (18 Jul 2007 - 17:16)
Bon ben c'est tout, j'ai contourné le probleme, mais par curiosité je voudrais quand meme bien connaitre la reponse!

Sinon, une autre question, existe-t-il en javascript une fonction native equivalente à "array_search" en PHP, ou bien faut-il la faire soit meme?


+++
Si je me rappelle bien, selon Douglas "Javascript" Crockford, mieux vaut utiliser un tableau pour des indices numériques, et un objet pour des indices "textes", donc style :

position[i ] = {
  x: [x, x + mini[i ].offsetWidth],
  y: [y, y + mini[i ].offsetHeight]
};


A essayer Smiley smile
Modifié par FlorentG (19 Jul 2007 - 21:40)
a écrit :
mieux vaut utiliser un tableau pour des indices numériques, et un objet pour des indices "textes"

En javascript, un tableau associatif (donc avec des clés texte) est équivalent à un objet contenant des propriétés. Ce n'est pas pour rien que objet.propriete == objet['propriete'].
Conclusion, ça ne veut rien dire, puisque tableau associatif = objet.

Pour array_search, non, ça n'existe pas. Par contre c'est relativement simple à faire :
N.B. J'ai choisi le nom indexOf par analogie avec les chaînes

Array.prototype.indexOf = function (oToFind, startIndex) {
if (typeof(startIndex)=='undefined' || startIndex==null) startIndex=0;

for (var i=startIndex; i < this.length; i++) {
if (this[i]==oToFind) return i;
}
return -1;
}

En modifiant un peu la boucle for, on peut également utiliser cette fonction pour chercher une valeur parmi les propriétés d'un objet (for(var i in this) { ... })[/i]
Ou simplement faire :

if("maprop" in monobj) {}

Et accesoirement tu peux faire une hashmap avec des index numériques...
QuentinC a écrit :
Conclusion, ça ne veut rien dire, puisque tableau associatif = objet.

Yes Smiley smile Maintenant les tableaux ont la propriété length en plus, au comportement assez marrant