【发布时间】:2016-10-01 21:38:43
【问题描述】:
我正在解决一个问题,其中一个数组作为解构参数传递给一个函数,然后该函数用于递归地将数组中每个数字元素的值加倍。 (练习的目的是设计一个不使用数组辅助方法的解决方案)
const numbers = [1, 2, 3]
// should return '[2, 4, 6]'
这是我找到的解决方案:
function double([first, ...rest]) {
if (rest.length) {
return [first * 2, ...double(rest)];
} else {
return [first * 2];
}
}
(FWIW 我还注意到,当您省略 else 条件时,此解决方案将起作用。)
我很难理解第二个块中的操作first * 2 是如何转换为rest 作为...double(rest) 的参数的。任何相关的输入/参考将不胜感激!
【问题讨论】:
-
你说的是
else块中的return [first * 2];吗?和rest没有任何关系。 -
它是递归的,它接受任意数量的参数。第一个参数始终定义为
first,而其余参数使用其余参数,并且将是一个数组。然后它将这些参数传递给下一个递归调用,其中rest数组中的第一个数字将作为first传递给下一个调用等,直到没有更多参数 -
对空数组的情况进行空检查会稍微好一些(在这种情况下,
first将是undefined,你应该返回[])。然后它将使用一个空数组作为输入,但现在情况并非如此。 -
@torazaburo 感谢您指出这一点,我会相应地重构
-
@adeneo 准确地说,它不接受任何数量的参数。它接受一个参数,一个数组,包含任意数量的元素。
标签: javascript recursion ecmascript-6