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 :

Manipulation des tableaux d'objets


Sujet :

JavaScript

  1. #1
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Points : 161
    Points
    161
    Par défaut Manipulation des tableaux d'objets
    Bonjour,

    S'il vous plait j'ai un tableau de 5 d'objets

    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
    25
    26
    var monTableauObjet =  { 
     
    	maListeObjets : [ 
     
    		{ "id": "1",
    		        "Afficher": "Un",
    			"Cacher": "Un"
    		}, 
    		{ "id": "2",
    			"Afficher": "Deux",
    			"phaseCacher": "Deux"
    		},
    		{ "id": "3",
    			"Afficher": "Quatre",
    			"phaseCacher": "Quatre"
    		},
    		{ "id": "4",
    			"Afficher": "Cinq",
    			"phaseCacher": "Cinq"
    		},
    		{ "id": "5",
    			"Afficher": "Six",
    			"phaseCacher": "Six"
    		},
    	] 
    };
    et je voudrais simplement ajouter un objet à la position 2 du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monTableauObjet.maListeObjets.push(2, { "id": "6", "Afficher": "Trois", "phaseCacher": "Trois"});
    mais je n'y arrive pas. J'ai cherché une fonction sur le Net en vain

    Merci

  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
    D'où sort cette fonction push ?
    En regardant de plus près, tu vois bien que la fonction que tu veux utiliser ne fonctionne pas comme ça.

    J'avais fait un bout de code pour ça il y a quelques temps :
    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
     Array.prototype.insertAt = function (beginSlice, lengthSlice, elemToInsert) {
         var arrReturned;
         lengthSlice = lengthSlice >= 0 ? lengthSlice : -lengthSlice; // ensure abs value. Faster than Math.abs
     
         arrReturned = this.slice(0, beginSlice);
         arrReturned.push(elemToInsert);
     
         return arrReturned.concat(this.slice(beginSlice + lengthSlice));
     };
     
     var result = [{
         "id": "1",
         "Afficher": "Un",
         "Cacher": "Un"
     }, {
         "id": "2",
         "Afficher": "Deux",
         "phaseCacher": "Deux"
     }, {
         "id": "3",
         "Afficher": "Quatre",
         "phaseCacher": "Quatre"
     }, {
         "id": "4",
         "Afficher": "Cinq",
         "phaseCacher": "Cinq"
     }, {
         "id": "5",
         "Afficher": "Six",
         "phaseCacher": "Six"
     }];
     
     result = result.insertAt(2, 0, {
         "id": "6",
         "Afficher": "Trois",
         "phaseCacher": "Trois"
     })
     
     console.log(result); // le nouvel objet est entre l'id 2 et l'id 3. A l'indice 2 du tableau, en somme
    Peut-être que quelqu'un a une meilleure solution ?

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 082
    Points : 44 687
    Points
    44 687
    Par défaut
    Bonjour,
    tu peux insérer directement avec la méthode splice
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon_tableau.splice(2, 0, { "id": "6", "Afficher": "Trois", "phaseCacher": "Trois"});

  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
    Oh le c***, j'ai réinventé la roue

    edit : Après un jsperf, on dirait que cette solution est plus rapide sur Chrome et IE11. Hum ... faudra que je creuse voir comment c'est fait chez underscore, lodash et consorts

    http://jsperf.com/splice-alternative

    edit2 : Hum, vu le code source du splice natif, ça m'étonne un peu moins qu'un slice + concat soit plus rapide qu'un splice

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 082
    Points : 44 687
    Points
    44 687
    Par défaut
    edit2 : Hum, vu le code source du splice natif, ça m'étonne un peu moins qu'un slice + concat soit plus rapide qu'un splice
    d'après le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var result = ['je', 'ton', 'père'].splice(1, 0, 'suis');
    est plus rapide que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var result = ['je', 'ton', 'père'].insertAt(1, 0, 'suis');

  6. #6
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Ben disons que splice est fait pour ça, donc après c'est du ressort du moteur JavaScript du navigateur d'optimiser les performances selon les cas. Il se peut qu'un slice+concat soit plus rapide dans certains cas, mais pas dans tous. On pourrait tout aussi bien dire que push est plus rapide que splice quand on insère un élément en fin d'array. De toute manière, les 3 lignes de code de plus à télécharger et exécuter compensent le gain potentiel.

    Enfin, pour la beauté du sport :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /* array.insert(index, value1, value2, ..., valueN) */
    Array.prototype.insert = function(index) {
        this.splice.apply(this, [index, 0].concat([].slice.call(arguments, 1)));
        return this;
    };

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 082
    Points : 44 687
    Points
    44 687
    Par défaut
    Acceptable, - de 140

  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
    Haha merci Sylvain

Discussions similaires

  1. [Toutes versions] manipulation des tableaux comme objets
    Par Grem974 dans le forum Excel
    Réponses: 12
    Dernier message: 28/05/2015, 16h22
  2. Manipulation des tableaux
    Par driss80 dans le forum Fortran
    Réponses: 4
    Dernier message: 18/01/2008, 08h51
  3. manipulation des tableaux
    Par amine556 dans le forum Informix
    Réponses: 4
    Dernier message: 26/11/2007, 15h20
  4. Manipuler des listes d'objet ?
    Par xla99 dans le forum Général Python
    Réponses: 4
    Dernier message: 06/06/2006, 15h06
  5. delete[] seulement pour des tableaux d'objets?
    Par Crisanar dans le forum C++
    Réponses: 7
    Dernier message: 22/10/2005, 19h50

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