我正在研究一个问题,其中一个数组作为一个析构参数传递给一个函数,然后该函数用于递归地加倍数组中每个数字元素的值。 (练习的目的是设计一个解决方案,而不使用数组助手方法)
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)
的参数。任何相关的输入/参考将不胜感激!
答案 0 :(得分:1)
分解你的代码......
[first, ...rest] = [1,2,3] //returns first = 1; rest = [2,3]
在第二次通话中,不使用点差..
[1 * 2, double(rest)] //rest = [2,3]
[first, ...rest] = [2,3] //returns first = 2, rest = 3
[1*2, [2*2, double(rest)]
在第三次通话中,不使用传播..
[1*2, [2*2, double(rest)]//rest = [3]
[first, ...rest] = [2,3] //returns first = 2, rest = [3]
[1*2, [2*2, [3*2]]
,提供[2,[4,[6]]]
使用...double()
代替double()
,数组将展平并返回[2,4,6]
以下是没有spread(...)
function double([first, ...rest]) {
if (rest.length) {
return [first * 2, double(rest)];
} else {
return [first * 2];
}
}
console.log(double([1,2,3]))