首页 > 解决方案 > 在参数上使用魔法 - 但前提是它们是数字(Javascript 算法)

问题描述

问题

创建一个将两个参数相加的函数。如果只提供一个参数,则返回一个函数,该函数需要一个参数并返回总和。

例如,addTogether(2, 3) 应该返回 5,addTogether(2) 应该返回一个函数。

使用单个参数调用此返回函数将返回总和:

var sumTwoAnd = addTogether(2);

sumTwoAnd(3) 返回 5。

如果任一参数不是有效数字,则返回 undefined。

我试过的

function addTogether(a, b) {

if(typeof(a) !== 'number'){
return undefined;
}

if(arguments.length == 2){
 let tim = arguments[0] + arguments[1];
 if(!tim.isNaN){
   return tim;

 }
}

else if(arguments.length == 1){

  return function(a, c){

let result = c + a;
if(!result.isNaN){
  return result;
}

  }

}

}

addTogether(2,3);

console.log(addTogether(2)([3]))

console.log(addTogether(2),(3))

以下 Console.logs 失败

addTogether(2)(3) 应该返回 5。

addTogether(2, "3") 应该返回未定义。

addTogether(2)([3]) 应该返回未定义。

我想知道的

  1. 你如何修复我的代码?
  2. 你会怎么做?

标签: javascriptalgorithmarguments

解决方案


您需要将所有参数验证为数字。您最初使用 是正确的typeof a !== 'number',但您也需要在其他任何地方都这样做 - 无论是在检查时b,如果提供了第二个参数,以及在返回函数时,如果没有提供第二个参数。

要返回一个函数,只需使用return (b) => { // logic }

function addTogether(a, b) {
  if (typeof a !== 'number') {
    return;
  }
  if (arguments.length >= 2) {
    if (typeof b !== 'number') {
      return;
    }
    return a + b;
  }
  // then a is the only argument
  return (b) => {
    if (typeof b !== 'number') {
      return;
    }
    return a + b;
  };
}

console.log(addTogether(2, 3));
console.log(addTogether(2)(3));
console.log(addTogether('foo'));


推荐阅读