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 :

Shuffle sur un array javacript


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut Shuffle sur un array javacript
    La question n'est pas comment faire le shuffle, j'y arrive très bien autrement.

    J'étais juste en train de m'amuser avec différentes syntaxes et j'ai abouti à ce script qui me pose deux interrogation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var ar = new Array("0","1","2","3","4","5","6","7","8","9");
    Array.prototype.shuffle= function () 
    { 
    for( var j=new Array(); this[0]; j.push( this.splice(Math.floor(Math.random() * this.length),1)));
    this=this.concat(j)
    } 
     
    ar.shuffle(); 
    alert(ar)
    il refuse de m'affecter this=this.concat(j)
    pourtant this se vide bien.
    Je suis obligé de faire:
    ce qui m'oblige à appeler la le prototype différemment :
    Pourquoi ne puis-je affecter j a this ?




    D'autre part si mon array est numerique au lieu d'alpha
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var ar = new Array(0;1;2;3;4;5;6;7;8;9);
    ça ne fonctionne plus du tout ???
    Ma page Developpez - Mon Blog 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

    Venez sur le Chat de Développez !

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    si je boucle sur j pas de soucis ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var ar = new Array("0","1","2","3","4","5","6","7","8","9");
    Array.prototype.shuffle= function () 
    { 
    for( var j=new Array(); this[0]; j.push( this.splice(Math.floor(Math.random() * this.length),1)));
    var i=0
    while(j[i++]){this[i-1]=j[i-1]}
    } 
     
    ar.shuffle(); 
    alert(ar)
    Ma page Developpez - Mon Blog 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

    Venez sur le Chat de Développez !

  3. #3
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par défaut
    Salut,

    Le fait qu'on ne puisse attaquer this en direct ne me surprend pas, je l'avais déjà observé; j'imagine que this est readonly.
    Pour le probleme des valeurs numériques, ca vient je pense de ton test d'itération :
    this[0] vaut 0, donc false...
    il faut donc mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for( var j=new Array(); this[0]!=null; j.push( this.splice(Math.floor(Math.random() * this.length),1)));
    return j;
    }

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    arf biensur pour this[0] !!! bien vu

    fonctionne aussi

    parcontre comment se fait il que je puisse faire un push dans this et pas un concat ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(j[i++]){this.push(j[i-1])}
    Ma page Developpez - Mon Blog 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

    Venez sur le Chat de Développez !

  5. #5
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par défaut
    ce n'est selon moi pas la méthode concat qui est interdite mais l'assignement à this :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Array.prototype.shuffle= function ()
    {
    for( var j=new Array(); this[0]!=null; j.push( this.splice(Math.floor(Math.random() * this.length),1)));
    this.concat(j);
    }
    est autorisé (mais sans intéret car concat renvoie un nouveau tableau), mais l'écriture de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    this = this.concat(j);
    est interdite; la partie de gauche d'un assignement doit être une variable...
    de même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String.prototype.truc = function() {
    	this = 'truc';
    }
    var aa = "aa";
    aa.truc();
    alert(aa);
    ne passe pas

  6. #6
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    Tu peux faire une vérification , fait une boucle sur tous les attributs / méthode de this et vérifit que la méthode concat existe

Discussions similaires

  1. (Tres debutant) :Question sur Tableau array
    Par alexwolf dans le forum Langage
    Réponses: 5
    Dernier message: 28/11/2007, 13h49
  2. [VBA-E] Question sur les Array de plages
    Par ruzakruzak dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/06/2007, 15h14
  3. [Tableaux] Effectuer un array_intersect sur n Array
    Par caledonien dans le forum Langage
    Réponses: 3
    Dernier message: 20/03/2007, 10h21
  4. Réponses: 7
    Dernier message: 10/01/2007, 00h37
  5. tutoriels sur vertex arrays
    Par franc82 dans le forum OpenGL
    Réponses: 3
    Dernier message: 01/11/2006, 21h02

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