从数组创建嵌套列表

Create a nested list from array

这是 Eloquent JavaScript 第 4 章的第 3 个问题。

基本上它要我创建一个函数,将数组从数组变成嵌套列表。

例如arrayToList([1, 2, 3]) 应该 return:

var list = {
  value: 1,
  rest: {
    value: 2,
    rest: {
      value: 3,
      rest: null
    }
  }
};

我想知道为什么我的代码会导致无限循环。

function arrayToList(arr) {
  var list = {};
  for (var i = 0; i < arr.length; i++) {
    var a = arr[i];
    function add(res) {
      if (i == 0) {
        res.value = a;
        res.rest = "null";
      }
      else {
        i -= 1;
        add(res.rest);
      }
    }
    add(list);
  }
  return list;
}

感谢您的观看!

你正在用你的循环计数器和递归玩游戏。每次 i 不是 0 你减一,然后循环加一。所以退一步,进一步,你永远不会完成。添加一些打印语句以查看每次引用它时 i 是什么。

如果不是 0,则在循环中间为 i 减去 1 - 所以它永远不会完成 for - 你可以为此使用递归!

function addToList(obj, arr, index) {
    obj.value = arr[index];
    if (index == (arr.length - 1)) {
        obj.rest = null
    } else {
        obj.rest = {};
        addToList(obj.rest, arr, index + 1)
    }
}

var myObj = {}; 
var arr = [1,2,3];

addToList(myObj, arr, 0)

演示:http://jsfiddle.net/freab275/