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 :

Récupérer les indices d'un array gruyère


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut Récupérer les indices d'un array gruyère
    Bonjour,

    J'ai un Array avec des indices non contigus.

    Je me pose la question de comment :
    - le parcourir en étant sûr de ne pas oublier de ligne, tout en restant performant (car tester tous les indices de Number.MIN_VALUE à Number.MAX_VALUE) je sais faire, mais c'est pas terrible niveau perfs...
    - retrouver les indices qui ont des valeurs (car faire un for (o in monarray) aussi je sais faire, mais j'ai aucune idée des indices des valeurs trouvées)

  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 659
    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 659
    Billets dans le blog
    1
    Par défaut
    une petite bidouille ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    foo=[];
     
    foo[0]="un";
    foo[7]="deux";
    foo[5]="sept";
    foo[13]="neuf";
     
    foo=foo.join('¤¤').replace(/¤{3,}/g,'¤¤').split('¤¤');
     
    console.log(foo)

    Heu a moins que tu ne veuilles conserver les indices ?

    Du coup essaye plutot de passer par un json plutot qu'un array ... un each sur el json ne bouclera pas sur des indexes non exisants ...
    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
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 098
    Par défaut
    Tiens c'est marrant j'ai lu un truc là-dessus il n'y a pas longtemps. C'est en anglais : http://www.2ality.com/2015/09/holes-arrays-es6.html

    Pour retrouver les indices, je crois que ta meilleure chance c'est la méthode forEach, elle saute les « trous » :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var cheese = [ 'a', , 'b', , , 'c' ];
    cheese.forEach(function (chr, index) {
      console.log(chr, index);
    });
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  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 659
    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 659
    Billets dans le blog
    1
    Par défaut
    Pour retrouver les indices, je crois que ta meilleure chance c'est la méthode forEach, elle saute les « trous » :
    Même pour un array ? J'aurais cru être obligé de passer par un objet JSON
    Une petite astuce bonne à retenir ...
    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 chevronné Avatar de 01001111
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 319
    Par défaut
    effectivement, d'accord avec Watilin,
    il y a aussi l'alternative suivante:
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (var p in cheese) {
            console.log(cheese[p], p);
    }
    à la différence que cette dernière méthode ne respecte pas le type des clés. Ici on aura le même résultat avec des chaines de caractères en tant que clés.

  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
    Par défaut
    pour retrouver les index avec des valeurs :

    à la différence que cette dernière méthode ne respecte pas le type des clés. Ici on aura le même résultat avec des chaines de caractères en tant que clés.


    Avec les objets JS, toutes les clés sont des String (si on omet les Symbol ES6). Il n'existe aucune méthode pour faire autrement, les variables en index sont automatiquement castées avec toString:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var o = { 42: "test" }
    o["42"] === o[42] // true
     
    o = { "function alert() { [native code] }": "wtf" }
    o[window.alert] // "wtf" sur Chrome

  7. #7
    Membre chevronné Avatar de 01001111
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 319
    Par défaut
    Citation Envoyé par SylvainPV Voir le message
    Avec les objets JS, toutes les clés sont des String (si on omet les Symbol ES6).
    Allégation approximative en tout cas sur chrome et firefox! Si javascript transtype automatiquement sur l'opérateur de comparaison ainsi que les clés, ça ne veut pas dire pour autant qu'il n'est pas typé.
    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
     
    var cheese = [ 'a', , 'b', , , 'c' ];
    cheese.forEach(function (chr, index) {
      console.log(chr, typeof(index));
    });
    for (var p in cheese) {
            console.log(cheese[p], typeof(p));
    }
    /*
    a number
    b number
    c number
    a string
    b string
    c string
    */

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

Discussions similaires

  1. Comment récupérer les clés d'un array ?
    Par totoAussi dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 08/04/2011, 14h05
  2. Récupérer les informations dans un Array
    Par ozlem dans le forum Langage
    Réponses: 20
    Dernier message: 01/04/2010, 12h07
  3. [TableModel]Récupérer les indices d'une cellule qui a changé
    Par mathieu_t dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 21/09/2009, 12h43
  4. Réponses: 5
    Dernier message: 04/03/2008, 22h22
  5. récupérer les indices d'un partil_sort_copy
    Par keng83 dans le forum SL & STL
    Réponses: 1
    Dernier message: 24/10/2007, 21h00

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