从数组创建嵌套列表
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)
这是 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)