簡體   English   中英

Javascript函數接受數組和字符串作為參數

[英]Javascript function accepts both arrays and strings as parameter

我有這個代碼:

    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']);
var showRegion = function(key) {
    if (typeof key === 'string')
         key = [key];
    if (key in regionOptions) {
       ...

無需為每種情況創建代碼,只需將密鑰字符串轉換為一個元素的數組,並且數組的代碼將同時執行。

這篇文章很老了,但這是一個非常好的提示:

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]

您可以使用typeof來檢查您的參數的類型並相應地繼續,例如

var showRegion = function(key) {
  if( typeof key === 'object') {
      //its an object
  }
  else {
     //not object
  }
}

您可以使用string.toString()始終返回相同字符串的事實,並且Array.toString()返回逗號分隔的字符串以及string.split(',')以接受三個可能的輸入:字符串,數組,逗號分隔的字符串 - 並可靠地轉換為數組(前提是您不希望逗號成為值本身的一部分,並且您不介意數字成為字符串)。

從最簡單的意義上講:

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

以便

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

理想情況下,您可能希望容忍null,undefined,empty-string,empty-array(並且仍然保持方便的單行):

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

那也是

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

您可能希望以不同方式解釋null / empty / undefined,但為了保持一致性,此方法將這些轉換為空數組,以便下游代碼不必檢查array-having-elements(或者如果迭代,則無需檢查)。

這可能不是非常高效,如果那是對你的約束。

在您的用法中:

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 */
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM