我正在尝试编写一个将数组和另一个函数作为输入的函数。关于提供的函数,我唯一知道的是它要么是
接受一个数字参数并返回一个新数字或
接受一个数字数组并返回一个新的数字数组。
在我的函数中,我想检查它是第一种还是第二种情况,以确定是否使用 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 themainFunction
what's the expected type of the predicate function.
关于javascript - 检查函数是否采用数组或单值输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37354847/