[JS] Bug très étrange... Comprends pas !

Bug très étrange... Comprends pas ! [JS] - HTML/CSS - Programmation

Marsh Posté le 16-08-2005 à 22:22:48    

Si j'ai un tableau à deux dimensions initialisé comme suit :
 

Code :
  1. var arrBocal = new Array();
  2. for (i = 0; i < size_x; i++)
  3. {
  4. for (j = 0; j < size_y; j++)
  5. {
  6.  arrBocal[i, j] = null;
  7. }
  8. }


 
Alors c'est normal que si je vais :
 

Code :
  1. arrBocal[5, 9] = "test";


 
Alors :
 

Code :
  1. arrBocal[0, 9] = arrBocal[1, 9] = arrBocal[2, 9] = arrBocal[3, 9] = arrBocal[4, 9] = arrBocal[5, 9] = arrBocal[6, 9] = arrBocal[7, 9] = arrBocal[8, 9] = arrBocal[9, 9] = "test"


 
J'ai ce même comportement à la fois sous IE et Mizolla. C'est normal ? JS ne gère pas de tableaux à deux dimensions ???
Obligé de faire des tableaux de tableau ??? (arrBocal[i][j] ?)
 
Ou si j'ai ratté un truc dans ma déclaration :pt1cable:

Reply

Marsh Posté le 16-08-2005 à 22:22:48   

Reply

Marsh Posté le 16-08-2005 à 22:44:00    

t'ain c'est terrible ce truc :)
 

Code :
  1. <script type="text/javascript">
  2. array1=new Array()
  3. function myObj(x, y)
  4. {
  5.    this.valx = x;
  6.    this.valy = y;
  7.    this.toString = function ()
  8.    {
  9.       return "{" + this.valx + ", " + this.valy + "}";
  10.    }
  11. }
  12. function compareNum(a,b)
  13. {
  14. return a.valx-b.valx;
  15. }
  16. var array1 = new Array(new myObj(800, 30), new myObj(3, 40), new myObj(70, 10));
  17. var array2 = new Array(new myObj(800, 30), new myObj(3, 40), new myObj(70, 10));
  18. array2.toString = function ()
  19. {
  20.   var ret = new String();
  21.   for (var i = 0; i < this.length; i++)
  22.   {
  23.     ret += this[i].valx + ", ";
  24.   }
  25.   if (ret.length > 0)
  26.     return ret.substr(0, ret.length - 2);
  27.   else
  28.     return "tableau vide!";
  29. }
  30. document.write("Sorted with compareNum: " + array2.sort(compareNum) + "<br/>" );
  31. document.write("Array1: " + array1 + "<br/>" );
  32. </script>


Message édité par Arjuna le 16-08-2005 à 22:50:42
Reply

Marsh Posté le 16-08-2005 à 22:50:02    

Arjuna a écrit :

J'ai ce même comportement à la fois sous IE et Mizolla. C'est normal ? JS ne gère pas de tableaux à deux dimensions ???


Bien sûr que non [:spamafote]  

Citation :

Obligé de faire des tableaux de tableau ??? (arrBocal[i][j] ?)


Oui, comme dans la quasi totalité des langages vu le nombre de langages gérant les matrices en type natif [:spamafote]  

Arjuna a écrit :

t'ain c'est terrible ce truc :)


Ca te choque pas de penser qu'un langage gère les matrices multidimentionnelles en natif mais un sort customisable t'impressionne? http://membres.lycos.fr/angel2k/petrus/petrusquignol.gif


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 16-08-2005 à 22:52:13    

Ben voir qu'un langage est pas foutu de gérer des tableaux multi-dimensionnels, mais propose la surcharge des méthodes de base de ses types système, oui, je trouve ça étrange.
 
L'inverse me semble plus logique...

Reply

Marsh Posté le 16-08-2005 à 22:56:45    

Arjuna a écrit :

Ben voir qu'un langage est pas foutu de gérer des tableaux multi-dimensionnels


Comme je le disais plus haut, le nombre de langages généraliste ayant des matrices en type natif doit se compter sur les doigts d'une main, et encore

Citation :

mais propose la surcharge des méthodes de base de ses types système, oui, je trouve ça étrange.


C'est inhérent à la structure par prototypage de l'OO du JS [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 17-08-2005 à 00:07:53    

Bah VB il supporte les tableaux à n dimensions, et pourtant il est tout pourri :o :p
 
Même Basic il savait faire :D
 
Sinon, je me demande... Il me semble bien que le C sait faire aussi.
 
M'enfin bon, c'est pas grave, j'ai pu finir le super truc qui sert à rien :)
 
http://magicweb.manga-torii.com/simland.htm :sol:

Reply

Marsh Posté le 17-08-2005 à 00:14:20    

Reste plus qu'à faire une V2 avec une gestion de l'espace améliorée et un fonctionnement prédateur/gibier plus évolué :)

Reply

Marsh Posté le 17-08-2005 à 00:40:54    

Arjuna a écrit :

Sinon, je me demande... Il me semble bien que le C sait faire aussi.


Je crois pas non...
 
Par contre tu peux faire a[b][c], ou b[c][a], ou probablement c[a+b], et ptet même (c+a)[b] [:petrus75]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 17-08-2005 à 01:58:13    

je parle bien du C et pas du C++ hein. il me semble me souvenir qu'à l'IUT on avant fait des tableaux tout bête avec.
 
en tout cas, en ADA, on peut. évidement. normal, c'est le seul, l'unique, le meilleur :)

Reply

Marsh Posté le 17-08-2005 à 01:59:47    

masklinn a écrit :

Comme je le disais plus haut, le nombre de langages généraliste ayant des matrices en type natif doit se compter sur les doigts d'une main, et encore

Ben et lisp et scheme avec make-array alors, hein? :D
A+,


Message édité par gilou le 17-08-2005 à 02:00:16

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 17-08-2005 à 01:59:47   

Reply

Marsh Posté le 17-08-2005 à 07:43:15    

gilou a écrit :

Ben et lisp et scheme avec make-array alors, hein? :D
A+,


on a pas encore atteint les doigts d'une main [:thalis]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 17-08-2005 à 10:15:09    

En C#, J#, VB.NET, COBOL.NET, VB, Basic, Lisp (donc), ADA
 
Doit y en avoir d'autres, mais je connais pas beaucoup de langages... (pis mon voisin non plus d'ailleurs :p)
 
Ca fait pas les doigts de deux mains, mais d'au moins une :p ;)

Reply

Marsh Posté le 17-08-2005 à 10:17:40    

Mouais, je vais m'avouer vaincu alors [:pingouino]
 
Mais ça ne change rien au fait que c'est pas dispo en JS [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 17-08-2005 à 18:01:55    

C'est plutôt simple de manipuler des tableaux simples comme des tableaux mutltidimensionnels. Par exemple un tableau [10][10] est comme un tableau [100]. la case [n][m] est simplement la case [10*n+m] dans le tableau simple. C'est pas complexe à implémenter.

Reply

Marsh Posté le 17-08-2005 à 18:09:59    

Ouais, mais c'est juste que d'un point de vue "logique", [x, y] c'est mieu que [x][y].
 
Et d'un point de vue cohérence des données aussi : avec un tableau à n dimension, chaque dimension est totalement fixe. Alors qu'avec un tableau simple contenant des tableaux qui contiennent des tableaux qui... ben je peux avoir :
 
arr[0].length => 10
arr[1].length => 1
 
Et ça moi j'aime pas... Un tableau à N dimensions, c'est une matrice à N dimensions et sans trous.
 
M'enfin bon, c'est pas bien grave.
 
Sinon, en effet, la solution de l'offset est pas bête, ça permet notamment d'émuler cet aspect de dimensions de tailles fixes.
 
Par contre, avec un tableau à 5 dimensions, tu commences à pleurer sérieusement avec ce système :D

Reply

Marsh Posté le 17-08-2005 à 18:19:44    

bibiphuque a écrit :

C'est plutôt simple de manipuler des tableaux simples comme des tableaux mutltidimensionnels. Par exemple un tableau [10][10] est comme un tableau [100]. la case [n][m] est simplement la case [10*n+m] dans le tableau simple. C'est pas complexe à implémenter.


Ca c'est les tableaux du C, théoriquement c'est bien, pratiquement c'est:
1- dangereux
2- extrèmement chiant quand il faut faire des redimensionnement
3- moisi au niveau de l'encapsulation et des séparations entre les éléments (si il n'y a pas de wrappers)

Arjuna a écrit :

Ouais, mais c'est juste que d'un point de vue "logique", [x, y] c'est mieu que [x][y].
 
Et d'un point de vue cohérence des données aussi : avec un tableau à n dimension, chaque dimension est totalement fixe. Alors qu'avec un tableau simple contenant des tableaux qui contiennent des tableaux qui... ben je peux avoir :
 
arr[0].length => 10
arr[1].length => 1
 
Et ça moi j'aime pas... Un tableau à N dimensions, c'est une matrice à N dimensions et sans trous.


 [:sisicaivrai]
chuis d'accord avec lui [:sisicaivrai]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed