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 :

unshift méthode sur array multidimension


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 29
    Par défaut unshift méthode sur array multidimension
    Bonjour,

    Ma question se porte sur comment insérer en javascript de nouvelles eléments dans un array mutidimension ( listeLiens)

    Chaque élément du tableau est constitué de 3 sous-éléments (titre,url et auteur)

    J'ai essayé d'inserer dans ce tableau un nouveau élément via unshift method
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    var listeLiens = [
        {
            titre: "So Foot",
            url: "http://sofoot.com",
            auteur: "yann.usaille"
        },
        {
            titre: "Guide d'autodéfense numérique",
            url: "http://guide.boum.org",
            auteur: "paulochon"
        },
        {
            titre: "L'encyclopédie en ligne Wikipedia",
            url: "http://Wikipedia.org",
            auteur: "annie.zette"
        }
    ];
     
    var titNom = 'AUTEUR';
    var titTitre = 'OEUVRE';
    var titUrl = 'URL';
    var insertItem = '{titre:"' + titTitre + '",url:"' + titUrl + '",auteur: "' + titNom + '"},'
     
      listeLiens.unshift(insertItem);
    Mais lorseque je l'affiche sur le console ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    listeLiens.forEach(function(itemTab){
        console.log(itemTab.titre);
            console.log(itemTab.url);
            console.log(itemTab.auteur);
    });
    le nouveu élément ajouté est affiché 'UNDEFINED' au lieu des 'AUTEUR' ,'OUVRE' et 'URL'

    Quelles modifs à apporter

    Merci

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Bonjour,
    à cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var insertItem = '{titre:"' + titTitre + '",url:"' + titUrl + '",auteur: "' + titNom + '"},'
    tu crées une chaine de caractères et non un objet.

    Il te faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var insertItem = {
      "titre": titTitre,
      "url": titUrl,
      "auteur": titNom
    };

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 29
    Par défaut
    merci NoSmoking
    je crois comprendre lorsequ'on écrit par exemple
    var insertItem = {...}; ( au lieu de var insertItem = '{...}' )
    on crée un objet pour la méthode .unshift
    -----
    Par ailleurs une question dans :
    listeLiens.unshift(insertItem);
    si
    insertItem est objet
    .unshift est une méthode
    mais listeLiens est également un objet ?

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,
    Citation Envoyé par paulselvan Voir le message
    Ma question se porte sur comment insérer en javascript de nouvelles eléments dans un array mutidimension ( listeLiens)
    Je ne pense que ce soit un "array mutidimension", je pense qu'il n'y a qu'une seule dimension mais les éléments de cette array (tableau) sont des objets et ces derniers ont trois propriétés...

  5. #5
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    solution :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    var listeLiens = [
          {
              titre: "So Foot",
              url: "http://sofoot.com",
              auteur: "yann.usaille"
          },
          {
              titre: "Guide d'autodéfense numérique",
              url: "http://guide.boum.org",
              auteur: "paulochon"
          },
          {
              titre: "L'encyclopédie en ligne Wikipedia",
              url: "http://Wikipedia.org",
              auteur: "annie.zette"
          }
      ];
     
    var titNom = 'AUTEUR';
    var titTitre = 'OEUVRE';
    var titUrl = 'URL';
    var insertItem = '{"titre":"'+titTitre+'","url":"'+titUrl+'","auteur":"'+titNom +'"}';
     
    listeLiens.unshift(JSON.parse(insertItem));
     
     titNom = 'titNom';
     titTitre = 'tototo';
     titUrl = 'zurl';
     insertItem = '{"titre":"'+titTitre+'","url":"'+titUrl+'","auteur":"'+titNom +'"}';
     
    listeLiens.unshift(JSON.parse(insertItem));
     
    for (let itemTab of listeLiens ) {
      // console.log(JSON.stringify( itemTab ));
      console.log(itemTab.titre);
      console.log(itemTab.url);
      console.log(itemTab.auteur);
      console.log('----------------------');
    }
    l'astuce de l'utilisation du JSON.parse permet d'éviter d'écrire un "new" ( soit une instanciation d'objet à placer dans la table)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 29
    Par défaut
    merci pour cette nlle façon de pg

  7. #7
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    Allez va, j'arrive pas à résister:
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    listeLiens.unshift(JSON.parse(`{"titre":"${titTitre}","url":"${titUrl}","auteur":"${titNom}"}`));

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Citation Envoyé par paulselvan
    je crois comprendre lorsequ'on écrit par exemple
    var insertItem = {...}; ( au lieu de var insertItem = '{...}' )
    dans un cas, le premier, tu crées/initialises un objet en utilisant sa forme littérale, dans le second tu crées/initialises une chaîne de caractère.

    Citation Envoyé par paulselvan
    insertItem est objet
    .unshift est une méthode
    mais listeLiens est également un objet ?
    en javascript tout est objet et listeLiens est plus précisément un Array puisque disposant de la méthode unshift.

    Pour appuyer ce qu’à écrit Beginner. les tableaux multidirectionnels ne sont qu’une vue de l’esprit.
    Un tableau, Array, peut contenir tout et n’importe quoi, un caractère, une chaîne, un objet, une fonction, un autre tableau et que sais je encore, il en est de même pour les valeurs des propriétés des objets.

    Citation Envoyé par psychadelic
    l'astuce de l'utilisation du JSON.parse permet d'éviter d'écrire un "new" ( soit une instanciation d'objet à placer dans la table)
    j’ai du mal à comprendre le sens de ta phrase.
    Les objets « type JSON » ont été créés pour permettre de convertir des chaînes de caractères en objet exploitable par un script (JSON.parse), et inversement pour pouvoir transmettre des objets par le réseau (JSON.stringify), émission d’une requête Ajax par exemple.

    La syntaxe d’écriture d’un objet « type JSON » est rigoureuse et requière l’usage exclusif des guillemets pour les chaînes de caractères qui peuvent être omise pour les objets « javascript ».

    Le parsage d’un objet « type JSON » sera toujours moins performant que l’affectation directe d’une valeur à une propriété d’un objet « javascript », sans parler de l’écriture et de la lisibilité lors de la maintenance. Le passage par les templates ajoute un second parsage et dans le cas présent n’apporte rien de plus, ou presque rien, au niveau de l’écriture.
    Le résultat des trois écritures
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     // objet littéral
    var o = {
      "titre": titTitre,
      "url": titUrl,
      "auteur": titNom
    };
    // avec chaîne constituée
    var c = JSON.parse('{"titre":"'+titTitre +'","url":"' +titUrl +'","auteur":"' +titNom+'"}') ;
    // avec les templates
    var t = JSON.parse(`{"titre":"${titTitre}","url":"${titUrl}","auteur":"${titNom}"}`) ;
    On peut jouer avec, cela reste une possibilité offerte par le langage, mais qui à mon sens n’a pas à se retrouver dans un code en production.

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

Discussions similaires

  1. [POO] ajout méthodes sur l'objet Array
    Par kimcharlene dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 24/04/2008, 16h40
  2. [EJB] Appeler une méthode sur un EJB
    Par c+cool dans le forum Java EE
    Réponses: 12
    Dernier message: 27/01/2006, 11h44
  3. [VB.NET]Méthodes sur un Dataview ?
    Par Golzinne dans le forum Windows Forms
    Réponses: 16
    Dernier message: 11/12/2005, 12h05
  4. Création dynamique de méthode sur une classe ?
    Par elitost dans le forum Général Java
    Réponses: 9
    Dernier message: 18/10/2005, 14h47
  5. pb sur ARRAY
    Par heleneh dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/09/2005, 09h58

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