![](/img/trans.png)
[英]Javascript- Array functions :Create a function that accepts a single parameter as an argument: an array of strings
[英]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.