繁体   English   中英

理解递归函数的解构参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM