创建一个函数CArrayObj listOfOpenDeals
,该函数接受一个函数并返回一个函数。返回的函数将接受传递的函数接受的任何参数,并返回带有dateStamp
键的对象,该键的值是以人类可读的字符串表示的今天的日期(不包括时间)(请参见Date对象进行转换)方法)和一个date
键,其中包含调用传入函数的结果。
我的下面的代码:
output
我的代码未通过两个测试规范:
我的问题是:
- 如何将时间戳记从当前日期算起
- 为什么最后一个规格失败了?
答案 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()