javascript - 检查函数是否采用数组或单值输入

标签 javascript

我正在尝试编写一个将数组和另一个函数作为输入的函数。关于提供的函数,我唯一知道的是它要么是

  1. 接受一个数字参数并返回一个新数字或

  2. 接受一个数字数组并返回一个新的数字数组。

在我的函数中,我想检查它是第一种还是第二种情况,以确定是否使用 Array.prototype.map() 调用提供的函数。

所以有了这两个函数...

var unknownFunction = function( unknownInput ) {
  //Does stuff with input

  //returns number or array of numbers...
  return someValueOrValues
}

var mainFunction = function( anArray, preFunction ){

  // SOME CODE TO CHECK IF ARG NEEDS TO BE NUMBER OR ARRAY
  // ...
  // ...

    **ANSWER WOULD FIT HERE**


  if( argIsNumber === true ){
    // function takes NUMBER
    anArray = anArray.map( preFunction )
  }else{
    // function takes ARRAY
    anArray = preFunction(anArray)
  }

  // DO STUFF WITH ARRAY AFTER USER FUNCTION HAS MADE IT'S MODIFICATIONS
  // ...
  // ...
  // ...

  return anArray;
}

有什么方法可以深入第一个函数来弄清楚如何最好地调用它?

最佳答案

由于 JavaScript 是一种动态类型的语言,函数的输入参数一旦有人用一些参数调用它就具有类型。

一种优雅且可行的方法是向整个给定函数添加一个属性以提示输入参数类型:

var func = function() {};
func.type = "number"; // a function decorator

var mainFunction = function(anArray, inputFunc) {
    if(typeof inputFunc != "function") {
         throw Error("Please supply a function as 'inputFunc'!");
    } 

    switch(inputFunc.type) {
        case "number":
           return anArray.map(preFunction);

        case "array": 
           return preFunction(anArray);

        default:
           throw Error("Type not supported");
    }
};

mainFunction([1,2,3], func);

当您使用动态类型语言时,您需要考虑使用 convention over configuration 进行编码和/或使用 duck typing .强类型语言提供的类型安全被良好的文档所取代。

例如:

Provide a function as second parameter with a type property to tell the mainFunction what's the expected type of the predicate function.

关于javascript - 检查函数是否采用数组或单值输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37354847/

相关文章:

javascript - 我可以将 JavaScript JSON.parse 与外部数组一起使用吗?

javascript - 获取附加元素以在悬停链接时进行检测

javascript - 将下拉菜单添加到我的动态表单 jQuery

javascript - jQuery 将十六进制转换为 rgba

javascript 正则表达式从小写字母中拆分大写字母

javascript - 通过 Input React 将参数从子级传递给父级

javascript - Ruby on Rails - 动态生成的部分中的 JavaScript

javascript - 使用状态参数转换到不同状态

javascript - 使用远程数据源的 Angular Material Design 自动完成及其性能与最佳方法

javascript - 如何将更多参数传递给自定义 sort() 函数?