|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 052 ![]() |
javascript ne sait pas comparer des variables aryay ou des objets ?
Code :
Code :
__________________
Ma page Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
||||
|
|
00
|
|
|
#2 |
|
Membre régulier
![]() Inscription : décembre 2007 Messages : 61 ![]() |
Non comme en java (et d'autres surement) tes variables foo et bar ont pour la valeur des références vers deux objets/tableaux différents.
Pour faire ce que tu veux faire tu dois implémenter une méthode equals qui comparerait non les références, mais les valeurs contenues dans la structure de donnée. Cette méthode equals pouvant être récursive si ton objet/tableau contient d'autres objets/tableaux, et aussi gérer le cas où tu te trouverais dans une référence cyclique. |
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() danseur Inscription : août 2003 Messages : 2 667 ![]() |
ben non, comparaison par référence...
[damned: I am grilled;] |
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Didier MouronvalDéveloppeur Web Inscription : juin 2008 Messages : 13 807 ![]() |
__________________
Pas de question technique par MP ! Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi ! Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi ! Mes formations video2brain : La formation complète sur JavaScript • JavaScript et le DOM par la pratique • PHP 5 et MySQL : les fondamentaux Mon livre sur jQuery
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé
![]() danseur Inscription : août 2003 Messages : 2 667 ![]() |
Code :
|
||
|
|
00
|
|
|
#6 | |||
![]() ![]() ![]() Didier MouronvalDéveloppeur Web Inscription : juin 2008 Messages : 13 807 ![]() |
Citation:
![]() [0, 1] serait sinon égal à [2, 1, 0]
__________________
Pas de question technique par MP ! Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi ! Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi ! Mes formations video2brain : La formation complète sur JavaScript • JavaScript et le DOM par la pratique • PHP 5 et MySQL : les fondamentaux Mon livre sur jQuery
|
|||
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() danseur Inscription : août 2003 Messages : 2 667 ![]() |
mais non
(ce me semble; même si j'ai pas affiné) sachant qu'on traite des tableaux avec la même organisation; à la moindre différence, tu peux demander un break; |
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 871 ![]() |
??
foo[0] != bar[0] ([0,1])[0] != ([2,1,0])[0] (0 != 2) -> BREAK dans ce cas, ça fonctionne par contre bien vu, dans le cas d'un objet (non array) si l'un des deux contient plus d'éléments que l'autre, la méthode de javatwister ne fonctionnera pas si le plus petit est comparé au plus grand. pour les array, ça fonctionnera dans tous les cas, car l'un des "i" sera "length". |
|
|
00
|
|
|
#9 |
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 052 ![]() |
ben après on peut tester sur les arrays triés ou pas selon que l'on veuille une egalité des indexes et des contenus ou juste du contenu ...
__________________
Ma page Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
|
|
00
|
|
|
#10 |
|
Expert Confirmé
![]() danseur Inscription : août 2003 Messages : 2 667 ![]() |
Willpower: j'avoue
SpaceFrog: j'avoue |
|
|
00
|
|
|
#11 | |
![]() ![]() ![]() Didier MouronvalDéveloppeur Web Inscription : juin 2008 Messages : 13 807 ![]() |
Citation:
![]() Mais on aura bien Ou alors, il faut exécuter deux fois le code : foo ?== bar puis bar ?== foo.
__________________
Pas de question technique par MP ! Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi ! Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi ! Mes formations video2brain : La formation complète sur JavaScript • JavaScript et le DOM par la pratique • PHP 5 et MySQL : les fondamentaux Mon livre sur jQuery
|
|
|
00
|
|
|
#12 |
|
Expert Confirmé
![]() danseur Inscription : août 2003 Messages : 2 667 ![]() |
en testant length à la base, pas problème, je pense;
|
|
|
00
|
|
|
#13 | |
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 871 ![]() |
Citation:
dans le cas d'array, un "for(i in obj)" assignera succesivement au "i" tous les indices du tableau ainsi que la valeur "length"(il me semble) donc la longueur des array sera comparé et ça empechera ce genre d'erreur. EDIT: oups, je retire ce que j'ai dis au sujet du length, apparement je me suis fourvoyé. il faut bien tester length en plus. par contre pour les objets (non array), il faudra utiliser une solution comme proposée ici : http://stackoverflow.com/questions/1...-in-javascript bien que je ne comprends pas pourquoi il compare les "function" sous forme de string au lieu de le gérer comme le reste avec une comparaison normale. (sauf s'il veut inclure dans sa comparaison des fonctions similaires mais non-égales en terme de signature/prototype). et je ne comprend surtout pas pq il crée 3 boucles au lieu de 2 (la première pouvant être include dans la seconde.) |
|
|
|
00
|
|
|
#14 | ||
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 052 ![]() |
pour les arrays on dirait que l'on peut utiliser .toString()
Code :
__________________
Ma page Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
||
|
|
00
|
|
|
#15 |
|
Expert Confirmé
![]() danseur Inscription : août 2003 Messages : 2 667 ![]() |
oui Spaf, puisque là, tu retrouves une comparaison par valeur (String...)
|
|
|
00
|
|
|
#16 | ||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 871 ![]() |
voici le code corrigé du lien que j'ai donnée plus haut. (avec optimisation pour les arrays, sans plantage pour les objets dom, etc..)
Code :
|
||
|
|
00
|
|
|
#17 | |||||
|
Membre expérimenté
![]() ![]() Duke Jikel Inscription : mai 2010 Messages : 340 ![]() |
Citation:
Attention au toString(); ça ne fait que te retourner le tableau en string et du coup tu te retrouves avec une comparaison de types primitifs Et attention justement à ne pas tester un tableau d'objet de cette manière, car sinon tu peux te retrouver avec des résultats de ce genre : Code :
Et si je me rappelle bien je crois que tu as déjà écris une méthode de copie récursive, tu pourrais donc t'en servir pour tester l'égalité de 2 objets |
|||||
|
|
00
|
|
|
#18 |
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 052 ![]() |
C'est juste pour relancer un troll...
![]() Au départ je suis tombé sur un teste d'égalité alert([]==[]) en bidouillant une sorte de empty() pour javascript. Ensuite ma curiosité m'a poussé à vouloir comparer des arrays et des jsons, sans trier ni boucler, ni importer une lib. Forcément le toString() masque les types, mais bon js et typage ... Bon encore une fois je tentais de réinventer le fil à couper l'eau tiède ...
__________________
Ma page Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
|
|
00
|
|
|
#19 | |
|
Expert Confirmé
![]() danseur Inscription : août 2003 Messages : 2 667 ![]() |
Citation:
|
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com