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 :

M�thode inconnue avec un Array


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur syst�mes et r�seaux
    Inscrit en
    F�vrier 2007
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 63
    Localisation : France, Lot (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Administrateur syst�mes et r�seaux

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 4
    Par d�faut M�thode inconnue avec un Array
    Bonjour,

    Je commence avec javascript et venant du monde C++, je gal�re un peu.
    Le but de mon code est de faire un expand d'une chaine "5-12" en un array "5","6","7","8","9","10","11","12"
    voici mon probl�me

    Mes datas de test
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    datatest = [{id:0,node:"0"},{id:1,node:"1-3"},{id:2,node:"5"},{id:3,node:"6-10"}]
    Mon code expandToArray protitype de String:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    String.prototype.expandToArray = function () {
      var d = this.valueOf();
      var out = '';
      if (d.split('-').length == 1) return d;
      var p = new Number;
      for (var i = parseInt(d.split('-') [0]); i <= parseInt(d.split('-') [1]); i++) {
        out = out + i + ',';
      }
      out = out.slice(0, - 1);
      return out.split(',');
    }
    test_1:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    datatest.forEach ( function (d) {console.log(d.node)})
    0
    1-3
    5
    6-10
    undefined
    ok pour les datas si ce n'est ce undefined que je n'explique pas

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    datatest[1].node.expandToArray()
    ["1", "2", "3"]
    l'expandToArray fonctionne

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    datatest[1].node.expandToArray()[0].constructor
    String() { [native code] }
    datatest[1].node.expandToArray().constructor
    Array() { [native code] }
    expandToArray renvoie bien un Array

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    datatest[1].node.expandToArray().forEach (function (d) {console.log(d)})
    1
    2
    3
    encore ok

    si je passe tous les enregistrement de data j'ai l"erreur suivante:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    datatest.forEach ( function (d) { d.node.expandToArray().forEach (function (d) {console.log(d)})})
    Uncaught TypeError: d.node.expandToArray(...).forEach is not a function(�)
    pourtant d.node est bien un String , je peu donc utiliser expandToArray, expandToArray est bien un Array je devrait pouvoir faire un forEach comme au dessus ???????

    Merci cordialement.

  2. #2
    R�dacteur

    Avatar de danielhagnoul
    Homme Profil pro
    �tudiant perp�tuel
    Inscrit en
    F�vrier 2009
    Messages
    6 389
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant perp�tuel
    Secteur : Enseignement

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par d�faut
    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
    27
    28
    let datatest = [ { id : 0, node : "0"}, { id : 1, node : "1-3" }, { id : 2, node : "5" }, { id : 3, node : "6-10" } ];
        
    String.prototype.expandToArray = function(){
      let
        d = this.valueOf(),
        out = '',
        p = new Number;
        
      if ( d.split('-').length == 1 ) return [ d ]; // doit �tre un Array
      
      for ( let i = parseInt( d.split( '-' )[0], 10 ); i <= parseInt( d.split( '-' )[1], 10 ); i++ ){
        out = out + i + ',';
      }
      
      out = out.slice( 0, - 1 );
      
      return out.split( ',' );
    };
    
    document.addEventListener( 'DOMContentLoaded', function( ev ){
     
      datatest.forEach ( function( d ){
        d.node.expandToArray().forEach( function( k ){
          console.log( k );
        });
      });
      
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues � un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    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
    Salut,

    Avec cette ligne l� :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    if(d.split('-').length==1)return d;
    , tu renvoies la String telle quelle s'il n'y a pas de tirets. Du coup, tu ne peux pas appeler forEach sur une String. Il faudrait retourner [d] dans ce cas pour toujours retourner une Array.

  4. #4
    Expert confirm�
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 61
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : Urbaniste
    Secteur : Sant�

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par d�faut
    Citation Envoy� par renaudfrancois_orl Voir le message
    Bonjour,

    Je commence avec javascript et venant du monde C++, je gal�re un peu.
    Le but de mon code est de faire un expand d'une chaine "5-12" en un array...
    Bonjour il en va en Javascript comme avec tout langage m�me le C++
    un array est une structure de donn�e et ce n'est pas une string
    alors quand je lis
    Citation Envoy� par renaudfrancois_orl Voir le message
    expand d'une chaine "5-12" en un array
    et
    Citation Envoy� par renaudfrancois_orl Voir le message
    j'avoue que je me pose des questions.

    j'imagine qu'en C++ tu aurais utilis� un int[] alors pourquoi utiliser une string et pas utiliser un tableau d'entier ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    String.prototype.expandToArray = function () {
      var d = this.valueOf();
      var out = [];
      if (d.split('-').length == 1) return d;
      var p = new Number;
      for (var i = parseInt(d.split('-') [0]); i <= parseInt(d.split('-') [1]); i++) {
        out.push(i);
      }
      return out;
    }
    Ensuite tout comme en C++ il est pr�f�rable qu'une fonction retourne un type de donn�e et un seul
    or dans ton code d est une String et out.split(',') est un tableau

    c'est comme si en C++ tu essayais d'�crire
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    int[] String::expandToArray() {
     String d = this;
     int[] out 
     if (d.notContaint('-')) return d;
     ....
     return out;
    }
    Tu va te chopper une erreur de compilation car ta m�thode retourne un string au return d et un array au return out

    il suffit donc de retourner un tableau avec la valeur de la string
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    String.prototype.expandToArray = function () {
      var d = this.valueOf();
      var out = [];
      if (d.split('-').length == 1) {
         out.push(parseInt(d));
      } else { 
        var p = new Number;
        for (var i = parseInt(d.split('-') [0]); i <= parseInt(d.split('-') [1]); i++) {
          out.push(i);
        }
      }
      return out;
    }
    ainsi lorsque tu fais
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
      datatest.forEach ( function( d ){
        d.node.expandToArray().forEach( function( k ){
          console.log( k );
        });
    si d.node contient une intervalle tu as un tableau avec plusieurs �l�ments
    et sinon tu as un tableau qui contient un �l�ment.

    comme tu as toujours un tableau tu peut utiliser la m�thode foreach
    A+JYT

Discussions similaires

  1. C# - appeler m�thode fortran avec array
    Par azraec dans le forum C#
    R�ponses: 0
    Dernier message: 12/04/2010, 16h34
  2. R�ponses: 2
    Dernier message: 14/03/2008, 09h57
  3. probleme avec un array
    Par kaygee dans le forum ASP
    R�ponses: 8
    Dernier message: 26/03/2007, 12h33
  4. M�thode Download avec le composant TNMFTP
    Par mattdef dans le forum C++Builder
    R�ponses: 3
    Dernier message: 20/10/2005, 06h48
  5. probl�me avec les array en pl/pgsql
    Par nico31120 dans le forum PostgreSQL
    R�ponses: 1
    Dernier message: 04/03/2005, 16h04

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