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 :

split ou for (var i in array)


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 145
    Points : 88
    Points
    88
    Par défaut split ou for (var i in array)
    Bonjour,

    La console m'indique une erreur et je n'arrive à comprendre ce qui ne va pas :

    Citation Envoyé par Console
    Uncaught TypeError: Object function (){
    return lower;
    } has no method 'split'
    La ligne d'erreur fait référence à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var groupe_valeur=tableau_stockage[i].split('&chap&');
    Dans $(stockage_copier), j'ai ceci : essai titre&chap&9| Nouveau article&chap&9-1|.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var tableau_stockage=new Array();						
    var tableau_stockage=$(stockage_copier).get('value').split('|');
    tableau_stockage.splice(tableau_stockage.length-1); // supp element vide
    	for (var i in tableau_stockage)
    		{
    			var groupe_valeur=new Array();
    			var groupe_valeur=tableau_stockage[i].split('&chap&');
    			for (var a in groupe_valeur)
    			{
    			}
     
    			}
    Lorsque je mets [codeinline]console.log(groupe_valeur[a]);[codeinline] dans la boucle [codeinline]for (var a in groupe_valeur)[codeinline], la console me donne ceci :

    Citation Envoyé par Console
    essai titre
    9
    function (){
    return lower;
    } indexd.php:593
    [undefined × 1] indexd.php:593
    function (fn, bind){
    Array.forEach(this, fn, bind);
    return this;
    } indexd.php:593
    function (){
    var i = this.length, clone = new Array(i);
    while (i--) clone[i] = cloneOf(this[i]);
    return clone;
    }
    ...
    Elle me donne bien les deux premières valeurs souhaitées à savoir "essai titre" et "9" et plante après !

    Merci pour votre aide,
    cedric

  2. #2
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    En tout cas,
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var tableau_stockage = 'essai titre&chap&9| Nouveau article&chap&9-1|'.split('|');
     
    tableau_stockage.splice(tableau_stockage.length-1); // supp element vide
     
    for (var i in tableau_stockage) {
      var groupe_valeur = tableau_stockage[i].split('&chap&');
      for (var a in groupe_valeur){
        console.log(groupe_valeur[a])
      }
    }
    retourne bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    essai titre
    9
     Nouveau article
    9-1
    Es-tu sûr que $(stockage_copier).get('value') contient bien "essai titre&chap&9| Nouveau article&chap&9-1|" ??

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 145
    Points : 88
    Points
    88
    Par défaut
    oui, à 100%,
    for (var i in tableau_stockage) peut sur s'appliquer sur un Array ou obligatoirement sur un Object ?
    car split transfère les valeurs vers un tableau et non en objet même si on le défini comme objet

    je viens de faire un petit test avec Array() et Object()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var essai=new Object();	
    essai[0]="essai 1";
    essai[1]="essai 2";
    console.log(essai);
    for (var i in essai)
    {
    	console.log(essai[i]);
    }
    avec Object() => aucun problème, et avec Array il affiche essai 1 et essai 2 suivi du même message d'erreur à savoir :
    function (){
    return lower;
    } indexd.php:590
    [undefined × 1] indexd.php:590
    function (fn, bind){
    Array.forEach(this, fn, bind);
    return this;
    }
    ...

  4. #4
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    A mon avis tu ne nous montres pas tout le code ..

    ça s'applique aussi bien sur un Object qu'un Array
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (variable in [Object | Array]) {
      statements 
    }
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var essai = {};	
    essai[0]  = "essai 1";
    essai[1]  = "essai 2";
    for (var i in essai)
      console.log(essai[i]);
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var essai = [];	
    essai.push("essai 1");
    essai.push("essai 2");
    for (var i in essai)
      console.log(essai[i]);
    ... retourne bel et bien :

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 145
    Points : 88
    Points
    88
    Par défaut
    vous pouvez retrouver mon code avec votre exemple ici http://module.construction-materiaux.com/indexd.php

    Pour activer la fonction, faite un clique droite sur l'un des titres du menu à gauche puis copier l'article
    enfin de nouveau clique droite sur l'un des titres du menu et sélectionner coller

  6. #6
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 183
    Points : 274
    Points
    274
    Par défaut
    on ne parcoure pas un array JS avec un for in, car sinon on va se retrouver avec toutes les propriétés/methodes de Array.

    Donc déjà un array se parcours avec for.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for (var i=0; i<essai.length; i++)
    {
    	console.log(essai[i]);
    }

    Ensuite, si c'est une map/object (equivalent en php est array associatif), là oui tu parcours avec un for in, mais attention, il faut faire attention à ne pas parcourir les methodes/propriétés rajoutés sur Object.prototype. Pour cela on utilisera hasOwnProperty

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var map = {"plop":"valeur1", "foo":"valeur2", "bar":"valeur3"};
    for (var i in map) {
       if (map.hasOwnProperty(i)) {
          console.log(map[i]);
       } 
    }

  7. #7
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Je vais vous mettre le doigt sur le problème :
    Code console : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> Array.prototype.zob = 42
    42
    >>> for (var i in ["a", "b", "c"]) console.log(i)
    0
    1
    2
    zob

    il ne faut pas utiliser for (in) pour boucler sur un tableau !

    Edit: arf, grillé par Arnogues

    On peut tenter de contourner le problème avec hasOwnProperty. Mais c'est guérir plutôt que prévenir.
    J'ai retrouvé une vieille conversation qui parle de ça.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  8. #8
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Watilin et arnogues : j'en suis bien conscient, mais là n'était pas la question
    D'ailleurs, pour parcourir un tableau js, j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (var i = 0, row; (row= tabs[i]) != undefined; i++)
      doSmthg(row);
    drick35 : Tu as mal recopié mon code, tu mélanges Array et Object :

    Array:
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var essai = [];	
    essai.push("essai 1");
    essai.push("essai 2");
     
    // OU directement :
    var essai = ["essai 1", "essai 2"];

    Object :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var essai = {};	
    essai["att1"] = "essai1";
    essai["att2"] = "essai2";
     
    // OU :
    var essai = {};
    essai.att1 = "essai1";
    essai.att2 = "essai2";
     
    // OU :
    var essai = {att1: "essai1", att2: "essai2"};

    La meilleure est la dernière non ? (Question pour les autres)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Fonction Split et For
    Par Guillaumus dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/07/2012, 18h51
  2. [Prototype] Arrays et les For..in
    Par lvr dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 14/10/2007, 23h43
  3. array for noob
    Par xian21 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 27/09/2007, 11h50
  4. array for noob (je parle de moi ^^)
    Par xian21 dans le forum C#
    Réponses: 15
    Dernier message: 26/09/2007, 14h06
  5. Problème+for+array+get
    Par xmane85 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/05/2006, 17h35

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