8 votes

La fonction Javascript accepte à la fois des tableaux et des chaînes de caractères en tant que paramètre

J'ai ce code :

    var showRegion = function(key) {
        if (key in regionOptions) {
            var entry       = regionOptions[key];
            var builder     = entry.builder;
            var layoutObj   = entry.layoutObj;
            var viewStarter = entry.viewStarter;

            var view = new builder();
            logger.info('Controller.' + key + ' => CreateAccountLayoutController');
            Controller.layout[layoutObj].show(view);
            view[viewStarter]();
        }
    };

Ce que je veux, c'est que le paramètre soit capable d'accepter un tableau ou une chaîne de caractères, et doit fonctionner de toute manière.

Exemples d'appels de fonction :

showRegion('phoneNumberRegion');
showRegion(['phoneNumberRegion', 'keyboardRegion', 'nextRegion']);

20voto

Cohars Points 1986

Ce post est vieux, mais voici un très bon conseil :

function showRegions(keys) {
  keys = [].concat(keys)
  return keys
}

// façon courte
const showRegions = key => [].concat(keys)

showRegions(1) // [1]
showRegions([1, 2, 3]) // [1, 2, 3]

9voto

Havenard Points 9023
var showRegion = function(key) {
    if (typeof key === 'string')
         key = [key];
    if (key dans regionOptions) {
       ...

Pas besoin de créer un code pour chaque cas, il suffit de convertir la clé en chaîne en un tableau d'un élément et le code pour les tableaux fera l'affaire pour les deux.

0voto

Sudhir Points 50854

Vous pourriez utiliser typeof pour vérifier le type de votre argument et procéder en conséquence, comme

var showRegion = function(key) {
  if( typeof key === 'object') {
      //c'est un objet
  }
  else {
     //pas un objet
  }
}

-1voto

storsoc Points 91

Vous pouvez utiliser le fait que string.toString() retourne toujours la même chaîne et Array.toString() retourne une chaîne délimitée par des virgules en combinaison avec string.split(',') pour accepter trois entrées possibles : une chaîne, un tableau, une chaîne délimitée par des virgules -- et convertir de manière fiable en un tableau (à condition que vous n'attendiez pas à ce que des virgules fassent partie des valeurs elles-mêmes, et que vous ne vous souciez pas que les nombres deviennent des chaînes).

De la manière la plus simple:

x.toString().split(',');

Ainsi

'a' -> ['a']
['a','b'] -> ['a','b']
'a,b,c' -> ['a','b','c']
1 -> ['1']

Idéalement, vous pouvez vouloir tolérer null, undefined, une chaîne vide, un tableau vide (et toujours garder une méthode pratique en une seule ligne):

( (x || x === 0 ) && ( x.length || x === parseFloat(x) ) ? x.toString().split(',') : []);

Ainsi aussi

null|undefined -> []
0 -> ['0']
[] -> []
'' -> []

Vous pouvez vouloir interpréter null/vide/undefined de manière différente, mais pour la cohérence, cette méthode les convertit en un tableau vide, de sorte que le code en aval n'ait pas à vérifier au-delà des éléments ayant un tableau (ou s'il itère, aucune vérification nécessaire.)

Ce n'est peut-être pas très performant, si c'est une contrainte pour vous.

Dans votre utilisation:

var showRegion = function(key) {
    key = ( (key || key === 0 ) && ( key.length || key === parseFloat(key) ) ? key.toString().split(',') : []);

    /* faire le travail en supposant que key est un tableau de chaînes, ou un tableau vide */
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X