这是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;
}
感谢您一起来看看!
答案 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)
答案 1 :(得分:0)
您正在使用循环计数器和递归来玩游戏。每次i
不为0时,减去1,然后循环加1。所以退后一步,前进一步,你永远不会完成。添加一些打印语句,以便在每次引用时查看i
。