[Intermediate Algorithm] - Arguments Optional
题目
创建一个计算两个参数之和的 function。如果只有一个参数,则返回一个 function,该 function 请求一个参数然后返回求和的结果。
例如,add(2, 3)
应该返回 5
,而 add(2)
应该返回一个 function
。
调用这个有一个参数的返回的 function
,返回求和的结果:
var sumTwoAnd = add(2);
sumTwoAnd(3)
返回 5
。
如果两个参数都不是有效的数字,则返回 undefined
。
提示
测试用例
add(2, 3)
应该返回5
。add(2)(3)
应该返回5
。add("http://bit.ly/IqT6zt")
应该返回undefined
。add(2, "3")
应该返回undefined
。add(2)([3])
应该返回undefined
。
分析思路
- 根据测试用例,需要先判断参数类型是否正确,使用
typeof
进行判断; - 判断参数个数,为 1 则使用回调函数再传入下一个参数;
- 两个参数直接相加即可;
代码
function add() {
for (var i = 0; i < arguments.length; i++) {
if (typeof arguments[i] !== "number") {
return undefined;
}
}
if (arguments.length == 1){
x = arguments[0];
return function(val){
if(typeof val == "number")
return val + x;
else
return undefined;
};
}
else {
return arguments[0] + arguments[1];
}
}
add(2,3);