父子树适用于嵌套 'if-else' 但不适用于 javascript 中的 'function recursion'
Parent Child Tree Works with nested 'if-else' but not with 'function recursion' in javascript
我必须以父子数组的形式排列给定数组的列表。我可以使用嵌套的 if-else 语句来做到这一点,但无法使用函数递归来做到这一点。下面是工作嵌套 if-else 方法和无效函数递归方法的代码。
这是数组
var arr = [
{"parent": "root", "name": "one"},
{"parent": "one", "name": "one one" },
{"parent": "one one", "name": "one one one"},
{"parent": "one one", "name": "one one two"},
{"parent": "root", "name": "two"},
{"parent": "root", "name": "three"},
{"parent": "root", "name": "four"},
{"parent": "four", "name": "four one"},
{"parent": "four one", "name": "four one one"},
{"parent": "four one", "name": "four one two"}];
var output111 = { 'parent': "0", 'name': "root", 'folder_list' : [] };
var output222 = { 'parent': "0", 'name': "root", 'folder_list' : [] };
这里是嵌套的 if-else 方法,可以完美地工作
function getTreeHardCoded (parent) {
for ( i = 0; i < arr.length; i++) {
if( arr[i].parent === parent.name ) {
var folderListI = {parent : arr[i].parent, name : arr[i].name, folder_list : []};
parent.folder_list.push(folderListI);
for ( j = 0; j < arr.length; j++) {
if( arr[j].parent === arr[i].name ) {
var folderListJ = { parent: arr[j].parent, name: arr[j].name, folder_list:[]};
folderListI.folder_list.push(folderListJ);
for ( k = 0; k < arr.length; k++) {
if( arr[k].parent === arr[j].name ) {
var folderListK = { parent : arr[k].parent, name : arr[k].name, folder_list : [] };
folderListJ.folder_list.push(folderListK);
}
}
}
}
}
}
}
getTreeHardCoded(output111);
这是函数递归方法不起作用
function getTree (parent) {
for ( i = 0; i < arr.length; i++) {
if( arr[i].parent === parent.name ) {
var folderList = {
parent : arr[i].parent,
name : arr[i].name,
folder_list : []
};
parent.folder_list.push(folderList);
getTree(folderList);
}
}
}
getTree(output222);
这里是 FIDDLE 的完整代码, 白色 bg 的期望输出 和 灰色 bg 的函数递归输出 .
提前致谢..
谈论全局变量咬你的屁股!在所有索引变量(i
、j
和 k
)前放置一个 var
。
我必须以父子数组的形式排列给定数组的列表。我可以使用嵌套的 if-else 语句来做到这一点,但无法使用函数递归来做到这一点。下面是工作嵌套 if-else 方法和无效函数递归方法的代码。
这是数组
var arr = [
{"parent": "root", "name": "one"},
{"parent": "one", "name": "one one" },
{"parent": "one one", "name": "one one one"},
{"parent": "one one", "name": "one one two"},
{"parent": "root", "name": "two"},
{"parent": "root", "name": "three"},
{"parent": "root", "name": "four"},
{"parent": "four", "name": "four one"},
{"parent": "four one", "name": "four one one"},
{"parent": "four one", "name": "four one two"}];
var output111 = { 'parent': "0", 'name': "root", 'folder_list' : [] };
var output222 = { 'parent': "0", 'name': "root", 'folder_list' : [] };
这里是嵌套的 if-else 方法,可以完美地工作
function getTreeHardCoded (parent) {
for ( i = 0; i < arr.length; i++) {
if( arr[i].parent === parent.name ) {
var folderListI = {parent : arr[i].parent, name : arr[i].name, folder_list : []};
parent.folder_list.push(folderListI);
for ( j = 0; j < arr.length; j++) {
if( arr[j].parent === arr[i].name ) {
var folderListJ = { parent: arr[j].parent, name: arr[j].name, folder_list:[]};
folderListI.folder_list.push(folderListJ);
for ( k = 0; k < arr.length; k++) {
if( arr[k].parent === arr[j].name ) {
var folderListK = { parent : arr[k].parent, name : arr[k].name, folder_list : [] };
folderListJ.folder_list.push(folderListK);
}
}
}
}
}
}
}
getTreeHardCoded(output111);
这是函数递归方法不起作用
function getTree (parent) {
for ( i = 0; i < arr.length; i++) {
if( arr[i].parent === parent.name ) {
var folderList = {
parent : arr[i].parent,
name : arr[i].name,
folder_list : []
};
parent.folder_list.push(folderList);
getTree(folderList);
}
}
}
getTree(output222);
这里是 FIDDLE 的完整代码, 白色 bg 的期望输出 和 灰色 bg 的函数递归输出 .
提前致谢..
谈论全局变量咬你的屁股!在所有索引变量(i
、j
和 k
)前放置一个 var
。