8

私はこのコードを持っています:

    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]();
        }
    };

私が必要とするのは、パラメーターが配列または文字列を受け入れることができ、どちらの方法でも機能することです。

関数呼び出しの例:

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

4 に答える 4

17

この投稿は古いですが、ここにかなり良いヒントがあります。

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

// short way
const showRegions = key => [].concat(keys)

showRegions(1) // [1]
showRegions([1, 2, 3]) // [1, 2, 3]
于 2016-07-10T01:24:29.423 に答える
9
var showRegion = function(key) {
    if (typeof key === 'string')
         key = [key];
    if (key in regionOptions) {
       ...

ケースごとにコードを作成する必要はありません。キー文字列を 1 つの要素の配列に変換するだけで、配列のコードは両方に対応します。

于 2013-05-20T03:36:05.700 に答える
0

次のように、 typeofを使用して引数のタイプを確認し、それに応じて続行できます。

var showRegion = function(key) {
  if( typeof key === 'object') {
      //its an object
  }
  else {
     //not object
  }
}
于 2013-05-20T03:37:31.983 に答える
-1

string.toString() は常に同じ文字列を返し、Array.toString() は string.split(',') と組み合わせてカンマ区切りの文字列を返すという事実を利用して、文字列、配列の 3 つの可能な入力を受け入れることができます。 、コンマで区切られた文字列 - そして確実に配列に変換します(コンマが値自体の一部であるとは思わず、数値が文字列になることを気にしない場合)。

最も単純な意味で:

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

となることによって

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

理想的には、null、未定義、空の文字列、空の配列を許容したい場合があります (それでも便利なワンライナーを維持します):

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

だからそれも

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

null/空/未定義を別の方法で解釈したい場合がありますが、一貫性を保つために、このメソッドはそれらを空の配列に変換するため、下流のコードは配列を持つ要素を超えてチェックする必要がありません (または反復する場合、チェックは不要です)。

それがあなたにとっての制約である場合、これは非常にパフォーマンスが高くないかもしれません。

あなたの使い方:

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

    /* do work assuming key is an array of strings, or an empty array */
}
于 2016-12-15T19:25:02.183 に答える