方法1、分两个步骤
// 开始递归方法
var makeTreeOptions = function(params) {
var result = []
for (var i = 0; i < params.length;i++) {
// 判断是否为顶层节点
if (params[i].parent_id === "0") {
var parent = params[i]
parent.children = this.getchilds(params, params[i].category_id, "parent_id", "category_id") // 获取子节点
result.push(parent)
}
}
return result
}
var getchilds = function (array, id, parentIdKey,idKey) {
parentIdKey = parentIdKey == undefined ? "parent_id" : parentIdKey;
idKey = idKey == undefined ? "id" : idKey;
var childs = []
// 循环获取子节点
for (var i = 0; i < array.length; i++) {
if (array[i][parentIdKey] === id) {
childs.push(array[i])
}
}
// 获取子节点的子节点
for (var i = 0; i < childs.length; i++) {
// 递归获取子节点
var childscopy = getchilds(array, childs[i][idKey],parentIdKey,idKey)
if (childscopy.length > 0) {
childs[i].children = childscopy
}
}
return childs
}
方法2、一步搞定
// 开始递归方法
var treeMake = function (params, parent_id, parentIdKey, idKey) {
parent_id = parent_id == undefined ? "0" : parent_id;
parentIdKey = parentIdKey == undefined ? "parent_id" : parentIdKey;
idKey = idKey == undefined ? "id" : idKey;
var result = []
var temp = [];
var resultIndex = 0;
for (var i = 0; i < params.length; i++) { // 循环获取子节点
if (params[i][parentIdKey] === parent_id) {
result.push(params[i])
if (params[i][idKey]) {
temp = treeMake(params, params[i][idKey], parentIdKey, idKey);
}
result[resultIndex].children = temp;
resultIndex = resultIndex + 1;
}
}
return result
}