创建一个接受函数并返回带有时间戳的函数的函数

时间:2019-06-12 19:44:48

标签: javascript object callback arguments key

创建一个函数CArrayObj listOfOpenDeals,该函数接受一个函数并返回一个函数。返回的函数将接受传递的函数接受的任何参数,并返回带有dateStamp键的对象,该键的值是以人类可读的字符串表示的今天的日期(不包括时间)(请参见Date对象进行转换)方法)和一个date键,其中包含调用传入函数的结果。

我的下面的代码:

output

我的代码未通过两个测试规范:

enter image description here

我的问题是:

  
      
  1. 如何将时间戳记从当前日期算起
  2.   
  3. 为什么最后一个规格失败了?
  4.   

2 个答案:

答案 0 :(得分:0)

1)对于第一个错误,您可以使用Date.toDateString()仅获取今天日期的日期部分(无时间)。

2)我认为第二个错误与以下事实有关:您没有考虑到返回的函数可以接受许多可变参数。为了解决这个问题,您可以将其声明为:

return function (...args) { ... };

然后,在调用接收到的函数时,请使用inputFunc(...args)。总之,您可以采用下一种方法:

const dateStamp = (inputFunc) =>
{
    let todayDate = new Date();

    return (...args) =>
    {
        return {
            date: todayDate.toDateString(),
            output: inputFunc(...args)
        }
    }
}

const stampedMultBy2 = dateStamp(n => n * 2);
console.log(stampedMultBy2(4));
console.log(stampedMultBy2(6));

const stampedMax = dateStamp((x, y) => Math.max(x, y));
console.log(stampedMax(-5, 6));
console.log(stampedMax(1, 4));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

您甚至可以使用箭头符号来缩短dateStamp功能:

const dateStamp = (inputFunc) => (...args) =>
    ({date: (new Date()).toDateString(), output: inputFunc(...args)});

答案 1 :(得分:0)

您的函数将num作为值。它应该以函数作为值。那么newObj的输出字段应该是对传递给该函数的函数求值的结果。

newObj.output = func()