javascript - 为什么这个递归在 Javascript 上不起作用?

标签 javascript recursion

问题出在 listToArray 函数中,arrayToList 只是提供有关如何创建列表的上下文。

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

var list = arrayToList([1,2,3])

var listToArray = function (list) {
    var array = [];
    array.push(list.value);
    if (list.rest != null) {
        array.concat(listToArray(list.rest));
    } else {
        return array;
    }
}

var array = listToArray(list)

> list
{ value: 1, rest: { value: 2, rest: { value: 3, rest: null } } }
> array
undefined

最佳答案

几个修复:

  • 必须返回要在 array.concat 中使用的数组
  • 每次新的 arr = [] 都会丢失前一个的上下文。要么应该将其作为参数传递,要么将其保留在全局上下文中。

运行以下代码片段。

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

var list = arrayToList([1, 2, 3])

var listToArray = function(list, array) {
  if (!array) {
    array = [];
  }
  array.push(list.value);
  if (list.rest != null) {
    array.concat(listToArray(list.rest, array));
  } else {
    return array;
  }
  // need to return the array which is used in array.concat
  return array;
}
var array = listToArray(list);
console.log(list);
console.log(array);

关于javascript - 为什么这个递归在 Javascript 上不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38757148/

相关文章:

javascript - 如何在显示对话框时暂时禁用网页滚动?

javascript - 未捕获的类型错误 : $(. ..).data(...).saveAsPDF 不是函数。剑道网格

javascript - 如何编写正则表达式来替换 url 字符串中的密码?

javascript - Angular2-在标题和侧边栏组件之间传递标志状态

ios - Objective C 递归调用

algorithm - 寻找整数中的最小数

C++:通过引用传递或使用私有(private)实例变量

javascript - 在 Javascript 实例上绘制图像

Java 递归表达式检查器

java - 使用 Java 创建一个递归函数,打印列表中包含的所有可能的项目序列。