【问题标题】:Working Magic on Arguments - But only if they are Numbers (Javascript Algorithm)在参数上使用魔法 - 但前提是它们是数字(Javascript 算法)
【发布时间】:2020-04-25 08:27:44
【问题描述】:

问题

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

例如,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") 应该返回 undefined。

addTogether(2)([3]) 应该返回 undefined。

我想知道什么

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

【问题讨论】:

    标签: javascript algorithm arguments


    【解决方案1】:

    您需要将所有参数验证为数字。您最初使用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'));

    【讨论】:

    • 唯一不明白的是 return (b)=>{logic} 是怎么工作的
    • 函数是 Javascript 中的一等成员 - 您可以将它们定义为表达式,就像在此处所做的那样,然后传递它们。 b 是参数,{ 之后是函数体。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 2023-03-09
    • 2011-09-19
    • 2013-02-16
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多