![](/img/trans.png)
[英]How to type define destructured arrow function expression arguments?
[英]understanding destructured arguments to recursive function
我正在解决一个问题,其中一个数组作为解构参数传递给一个函数,然后该函数用于递归地将数组中每个数字元素的值加倍。 (练习的目的是设计一个不使用数组辅助方法的解决方案)
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)
的参数。 任何相关的输入/参考将不胜感激!
分解你的代码...
[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]))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.