2016-08-04 57 views
0

问题出在listToArray函数中,arrayToList就在那里提供关于如何创建列表的上下文。为什么不是这个递归在JavaScript上工作​​?

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 
+1

只起了'return'声明在'else'块,而不是在'if'块。 – Xufox

+0

这真的是无法通过在调试中加入代码来解决的吗? – 2016-08-04 02:38:50

回答

1

情侣修复的:

  • 必须返回数组中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);