[JS]Traitement d'une variable pouvant être un tableau ou pas

Traitement d'une variable pouvant être un tableau ou pas [JS] - Javascript/Node.js - Programmation

Marsh Posté le 05-03-2018 à 15:51:36    


J'ai un serveur nodejs qui va chercher des infos dans un fichier JSON. Suivant l'enregistrement demandé, les infos retournées peuvent être une variable ou un tableau de variables (exemple d'un enregistrement dans le JSON : "donnees":"foo" ou "donnees":["foo","bar"] )
 
Y a-t-il une manière plus propre (et plus concise) de traiter ces données que de devoir passer par ça :
 

Code :
  1. // récupération de la ou des "donnees" dans le JSON, et stockage dans une variable "aTraiter"
  2. if (Array.isArray(aTraiter)) {
  3.   for(var element in aTraiter) {
  4.    // traitement sur chaque element du tableau
  5.   }
  6.  } else {
  7.    // même traitement que ci-dessus mais juste sur une seule variable
  8.  }


 
À noter : Si je ne fais pas le test isArray et que je n'ai qu'une chaîne de caractères dans aTraiter, le "for… in" décompose toute ma chaîne caractère par caractère donc pas le comportement voulu.
 
Dans l'idéal, vu que le traitement est le même, j'aurais voulu n'avoir à l'écrire qu'une seule fois pour tous les cas de figure. Est-ce possible ?


---------------
If you think it could look good, then I guess it should
Reply

Marsh Posté le 05-03-2018 à 15:51:36   

Reply

Marsh Posté le 05-03-2018 à 16:32:05    

Lu,
 
bah :

Code :
  1. aTraiter = Array.isArray(aTraiter) ? aTraiter : [aTraiter];
  2. for (var element in aTraiter) {
  3.    ...
  4. }


?

Reply

Marsh Posté le 05-03-2018 à 16:44:45    

Ha ouais, tout bêtement :D  
 
Je sais pas pourquoi je m'attendais à un truc plus élégant, mais ça fera bien l'affaire :jap:  
 
Merci !


---------------
If you think it could look good, then I guess it should
Reply

Marsh Posté le 05-03-2018 à 17:00:12    

Effectivement, ça fonctionne très bien :)  
 
Je connaissais pas ce truc "variable = [variable]", ça fait quoi exactement ? Ça transforme juste ta variable en tableau avec un seul enregistrement (le contenu original de la variable) ? Ou y'a d'autres trucs qui se passent que je ne vois pas ?
C'est un raccourci d'écriture (comme "tableau = []" à la place de "tableau = new Array()" ) ?


---------------
If you think it could look good, then I guess it should
Reply

Marsh Posté le 05-03-2018 à 17:35:14    

Citation :

Ça transforme juste ta variable en tableau avec un seul enregistrement (le contenu original de la variable) ?


Oui, c'est exactement ça : on crée un tableau dont le contenu de la variable aTraiter en est le seul élément.


Message édité par pluj le 05-03-2018 à 17:35:50
Reply

Marsh Posté le 05-03-2018 à 17:41:08    

Cool, merci pour la précision, je le saurai maintenant :) (c'est vraiment un langage de feignasse le Javascript… :o )


---------------
If you think it could look good, then I guess it should
Reply

Marsh Posté le 05-03-2018 à 17:59:27    

Ce n'est pas le qualificatif que j'aurais employé à propos de JS (mais bon, ce sujet n'est pas le lieu pour en débattre/troller).
 
Et puis tu peux faire la même chose avec beaucoup de langages. La "syntaxe" pour un tableau est également identique dans pas mal d'entre eux (Ruby, PHP >= 5.4.0, etc).

Reply

Marsh Posté le 05-03-2018 à 21:45:01    

Ha non, je voulais pas troller, c'est plutôt moi la feignasse :D  
 
Je programme du micro-contrôleur en simili-C à côté, je me bouffe les couilles à devoir faire moi-même des fonctions pour tout et n'importe quoi… Du coup j'adore la versatilité du JS là-dessus ;) (et c'est bien pour ça que je posais ma question à la base, je me disais bien qu'il devait y avoir une solution facile tirant partie de la grande liberté de la syntaxe JS)


---------------
If you think it could look good, then I guess it should
Reply

Marsh Posté le 05-03-2018 à 22:26:11    

Ah, oui, c'est sûr qu'en comparant un langage compilé et bas niveau comme le C à un langage type scripté, il n'y a vraiment pas photo en complexité comme temps de développement ;)


Message édité par pluj le 05-03-2018 à 22:27:20
Reply

Marsh Posté le 05-03-2018 à 23:25:11    

Voilà. D'ailleurs je suis super content de m'être tourné vers nodeJS, que je connaissais pas, et qui convient parfaitement à ce que je dois faire. L'inclusion de modules et tout ça rajoute encore une couche de confort au JS de base, sans compter l'aspect événementiel qui était le critère principal à satisfaire.
 
Merci encore pour ta réponse, j'ai gagné quelques lignes de code vu que j'avais plusieurs occurrences de ce bloc (et puis j'ai même carrément foutu l'expression ternaire dans le for tant qu'à faire :o ).


---------------
If you think it could look good, then I guess it should
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed