【发布时间】:2017-05-19 13:42:38
【问题描述】:
假设我有这个简单的 JavaScript 函数:
function returnArray(){
return [1, 2, 3];
}
进一步假设我说
var test = [0, ...returnArray()];
您希望 test 等于 [0,1,2,3],而且您是对的。我试过了,当然它有效。
现在我有这个练习,我想构建一个名为 double 的函数,它以一个数组作为参数并返回另一个数组,其中包含所有原始数组的加倍值。所以如果我调用 double([1,2,3]) 我应该得到 [2,4,6]。练习的限制是我必须使用only数组解构、递归和其余/扩展运算符来构建我的函数。不允许使用数组助手。所以我想出了这个:
function double(array){
if (array.length===1) return 2*array[0];
var [num, ...rest] = array;
if (rest.length!=0) return [2*num, ...double(rest)];
}
如果我对任何大小至少为 2 的数组运行此函数,我会收到一条错误消息,指出 double 不是函数。如果我在 double 之前删除 ... 运算符,那么神奇地 double 又是一个函数,当然 double([1,2,3]) 的结果是 [2,[4,6]],这并不完全与 [2,4,6] 相同。
我的第一个想法是,也许出于某种奇怪的原因,你不能在函数前面使用 ...,即使函数返回一个数组,所以我用上面的 returnArray() 函数测试了这个假设,并发现它工作得很好。我不知道为什么它会在练习中崩溃。我只能猜测递归可能与它有关,但我不知道为什么会这样。谁能指出我的代码有什么问题?
编辑:谢谢大家,这是一个非常愚蠢的错误!我应该看到的。我在你的一些答案中添加了 cmets。
【问题讨论】:
-
你需要
return [2*array[0]];。 -
我使用该代码得到的错误是
double(...) is not iterable,并不是说它不是函数
标签: javascript arrays recursion