IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

fonction qui retourne un tableau


Sujet :

JavaScript

  1. #21
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    Citation Envoyé par bilou_2007 Voir le message
    [code]Voilà l'essentiel du code, je dois absolument faire alert(retournerTableau(0) === []); afficher true.
    alors là c'est pas gagné !!!

    ...autant retourner null si le tableau est vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return tableau.length ? tableau : null;

  2. #22
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    au pire, transforme un peu le retour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return tableau.toString()
    et demande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(retournerTableau(0)==="");
    au moins tu auras un résultat cohérent;

  3. #23
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    tu peux également passer par une comparaison avec un tableau vide déclaré, on comparera bien des références
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var TNULL = [];// sans allusion aucune
    avec dans la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return tableau.length ? tableau : TNULL;
    et le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert( retournerTableau()=== TNULL);

  4. #24
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    attention: tableau.length renverra 0 si tableau est vide...

  5. #25
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Citation Envoyé par bilou_2007 Voir le message
    je dois absolument faire alert(retournerTableau(0) === []); afficher true.
    A la limite, décompose ton test pour éviter de te faire piéger par des références distinctes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var r = retournerTableau(0);
    alert(("pop" in r) && !r.length);//c.a.d. 1) est-ce un tableau ? PUIS 2) est-il vide ?

  6. #26
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 102
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    tu peux également passer par une comparaison avec un tableau vide déclaré, on comparera bien des références
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var TNULL = [];// sans allusion aucune
    avec dans la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return tableau.length ? tableau : TNULL;
    et le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert( retournerTableau()=== TNULL);
    En fait j'ai pas le droit de toucher à la comparaison, j'ai juste accès à la fonction et rien d'autre. Honnêtement, j'aurais jamais cru qu'un détail que je négligeais souvent allait me faire bloquer graaave.

  7. #27
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    En fait j'ai pas le droit de toucher à la comparaison
    Qu'est-ce qui t'impose ce "pas le droit" ?
    Parce que dans la mesure où il est impossible de comparer des tableaux, tu vas vite devoir modifier ta façon de faire...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  8. #28
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Non, pas tout à fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function Array(){
    alert(this);
    }
    var a = [];
    var b = new Array();
    Tu aime bien me taquiner …

    Citation Envoyé par Bovino Voir le message
    Ceci dit, un petit test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var a = new String('toto');
    var b = new String('toto');
    var c = 'toto';
    var d = 'toto';
    alert(a == b);
    alert(c == d);
    alert(a == c);
    Voila un bout de code qui génère des résultats différent selon les interpréteurs.
    Encore plus étonnant sur Chrome et FF (a === c) => false !
    Il semblerait que a et c ne référence pas le même type.

    Si quelqu’un a une explication logique a cette absurdité ! Je suis preneur.
    Désolé pour le hors sujet mais cela me tracasse ….

  9. #29
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Par défaut
    Citation Envoyé par Bovino Voir le message
    fourni un résultat surprenant
    Il n'y a rien de suprenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var a = [];
    var b = [];
    a et b sont deux instances d'Array différentes donc deux objets différents

    donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    a==b; //false
    []==[]; //false
    Et comme dit plus haut c'est la longueur du tableau qui doit être testée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(retournerTableau().length==0) {
      //tableau vide
    }

  10. #30
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    Citation Envoyé par p3ga5e Voir le message
    Encore plus étonnant sur Chrome et FF (a === c) => false !
    Il semblerait que a et c ne référence pas le même type.

    Si quelqu’un a une explication logique a cette absurdité ! Je suis preneur.
    Désolé pour le hors sujet mais cela me tracasse ….
    je te rassure sous IE et OPERA c'est également le même résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var a = new String('texte');
    var b = 'texte';
    alert( 'a : ' +typeof a +'\nb : ' +typeof b);
    alert( a===b);

  11. #31
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Par défaut
    Encore plus étonnant sur Chrome et FF (a === c) => false !
    a est un object généré par String.


  12. #32
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    String.prototype.Alert = function() 
    {
    	alert(this);
    }
    var a = new String('texte');
    var b = 'texte';
    a.Alert();
    b.Alert();
    les 2 déclarations ci-dessus reçoivent bien le prototype String

  13. #33
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par dukej
    Il n'y a rien de suprenant :
    Je ne te surprendrais en disant qu'une fois de plus, je ne suis pas vraiment d'accord... Je vais même finir par me demander s'il n'y a pas quelque chose de personnel

    Qu'il soit normal que deux valeurs identiques créées par un constructeur soient considérées comme différentes (parce que représentant de fait deux instances différentes ayant la même valeur) peut se concevoir (et encore, l'opérateur == n'est pas défini, sauf erreur de ma part pour savoir si deux valeurs représentent la même instance mais pour savoir si deux valeurs sont égales...)
    En revanche, ça ne devrait pas être le cas pour une déclaration littérale, ou du moins, le comportement devrait être identique pour tous les types.
    Ce qu'il y a d'étonnant, c'est donc un comportement pour les nombres et les chaines et un différent pour les autres types...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  14. #34
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Par défaut
    Encore faudrait'il savoir ce qu'est l'egalité literal de 2 tableaux ?
    car pour moi , d'un point de vue literal, ceci ne me choquerais pas : [ 1, 2 ] == [2, 1] => true;
    ben oui les 2 ensembles ont le le meme nombre d'element ainsi que leur intersection

  15. #35
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Ben non, pas vraiment, un tableau JavaScript est défini par un nombre donné de couples indices / valeur.
    Deux tableaux sont donc supposés être égaux si pour chaque indice, la valeur est identique et strictement égaux si pour chaque indice, sa valeur et son type sont indentiques.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  16. #36
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Par défaut
    ah pour moi lorsque l'on parle de "literal" c'est qu'on n'est plus dans language programation, mais dans le seul language universel exitant les maths !
    si on en revient a le technique il s'agit de 2 alloctions memoire différences ( adresse, pointeur ou referance différentes ) est c'est donc normal que légalité ne fonctionne pas !
    contrairement au string l’égalité de 2 tableaux n'a aucun définition ! heureusement que le langage javascript ne nous en impose pas une !

  17. #37
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Non, lorsque je parle de littéral, c'est parce qu'il existe deux façons de déclarer des variables.
    La forme constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var n = new Number();
    var s = new String();
    var a = new Array();
    var o = new Object();
    var f = new Function();
    var r = new RexExp();
    qui instancient un objet et la forme littérale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var n = 0;
    var s = '';
    var a = [];
    var o = {};
    var f = function(){};
    var r = /./;
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  18. #38
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par p3ga5e
    contrairement au string l’égalité de 2 tableaux n'a aucun définition ! heureusement que le langage javascript ne nous en impose pas une !
    C'est pourtant défini en PHP par exemple : Opérateurs de tableaux
    Qu'est-ce qu'il y a de choquant ou d'anormal ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  19. #39
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Par défaut
    ^^ tu vient de me donner une autre raison de detester le langauge PHP ! merci
    sinon concernant les déclarations littéral des objets je suis ok avec toi! mais pas pour la declaration des opérateurs sur les objets
    par exemple a + b != b + a
    si a et b sont des matrices de taille diferentes l'operateur + n'est pas comutatif mais quant est t'il de ta perception du + sur des Array javascript ?
    c'est une question qui n'a pas de sens d'un point de vue mathématique

    reste toujours le cas des strings en javascript qui reste un mystere pour moi

  20. #40
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    Je pense que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert( []==[] ); // Joli smiley à lunettes au passage :)
    correspond en interne à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var x, y;
     
    // Tableau #1		
    x=[]; // x référence le tableau #1 nouvellement créé
     
    // Tableau #2
    y=[]; // y référence le tableau #2 nouvellement créé
     
    alert( x==y );	// False (ce n'est pas le même tableau qui est référencé)
    Tandis que...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var x, y;
     
    x=y=[1,2];	// x et y référencent le même tableau nouvellement créé
     
    alert( x==y );	// True
    Il nous manque vraiment une documentation sur la gestion des variables en mémoire par les interpreteurs Javascript. Nous ne devrions plus nous poser ce genre de questions aujourd'hui.

Discussions similaires

  1. [Tableaux] Fonction qui retourne un tableau
    Par benooiit dans le forum Langage
    Réponses: 2
    Dernier message: 05/01/2007, 01h50
  2. Réponses: 6
    Dernier message: 22/09/2006, 18h17
  3. Fonction qui retourne un tableau ou 2 variables ? possible ou non
    Par jiojio dans le forum VB 6 et antérieur
    Réponses: 45
    Dernier message: 05/06/2006, 15h00
  4. [VB] Fonction qui retourne un tableau
    Par ptitsoleil87 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 24/12/2005, 10h52
  5. Fonction qui retourne un tableau
    Par _lara_ dans le forum ASP
    Réponses: 6
    Dernier message: 24/05/2004, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo