从数组创建嵌套列表

时间:2015-07-24 20:45:56

标签: javascript loops infinite-loop

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

基本上它要我创建一个函数,将数组放入数组的嵌套列表中。

E.g。 arrayToList([1,2,3])应该返回:

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

感谢您一起来看看!

2 个答案:

答案 0 :(得分:1)

如果它不是1,你会在循环中间为i减去0 - 所以它永远不会完成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/

答案 1 :(得分:0)

您正在使用循环计数器和递归来玩游戏。每次i不为0时,减去1,然后循环加1。所以退后一步,前进一步,你永远不会完成。添加一些打印语句,以便在每次引用时查看i