简体   繁体   English

为什么此递归不适用于Javascript?

[英]Why isn't this recursion working on Javascript?

The problem is in the listToArray function, arrayToList just there to provide context on how lists are being created. 问题出在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

Couple of fixes : 几个修复

  • Have to return the array to be used in array.concat 必须返回要在array.concat使用的array.concat
  • Every time a new arr = [] loses the context of the previous. 每当新的arr = []失去上一个的上下文时。 Either it should be passed as a parameter, or keeping it in a global context. 要么将其作为参数传递,要么将其保留在全局上下文中。

Run the following snippet. 运行以下代码段。

 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); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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