【问题标题】:Elqouent Javascript Exercise "nth" [duplicate]Eloquent Javascript 练习“nth”[重复]
【发布时间】:2017-01-02 11:36:54
【问题描述】:

我在 Eloquent JavaScript 的第 4 章练习中的第 n 个函数的代码如下:

function nth(list, num){
   var node = list;
   if(num === 0) {
     return node.value;
   } else {
      if (node.rest) {
         node = node.rest;
         nth(node, num - 1);
      } else {
         return undefined;
      }
   }
}

console.log(nth(arrayToList([10,20,30]),1));
// -> 20

我有一个按预期工作的函数的迭代版本;然而,即使在 return 语句正确打印 node.value 之前调用 console.log,该函数的递归版本也会返回 undefined。为什么?

这也是arrayToList函数:

function arrayToList(arr){
   var list = {value: arr[arr.length - 1], rest: null};
   for (var i = arr.length - 2; i >=0; i--){
      list = {value: arr[i], rest: list};
   }
   return list;
}

【问题讨论】:

  • 您在递归调用中缺少return。如果您不返回递归调用返回的内容,则结果将为undefined
  • return nth(node, num - 1);
  • 因为你从不做return nth(node, num - 1);所以函数执行nth(...)然后永远不会返回那个函数的结果。始终在任何地方定义明确的返回值。
  • 另一种选择:var arrayToList = arr => arr.reduceRight((rest, value) => ({value, rest}), null);var nth = (list, num) => list /* && num >= 0*/? num? nth(list.rest, num-1): list.value: void 0;

标签: javascript


【解决方案1】:

你需要return递归得到的结果:

return nth(node, num - 1);

【讨论】:

  • 谢谢!就是这样
猜你喜欢
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-25
  • 2015-10-02
相关资源
最近更新 更多