var list = [
{ id: 1, name: 'AAAA', parent_id: 0},
{ id: 2, name: 'BBBB', parent_id: 0},
{ id: 3, name: 'AAAA1', parent_id: 1},
{ id: 4, name: 'AAAA2', parent_id: 1},
{ id: 5, name: 'BBBB1', parent_id: 2},
{ id: 6, name: 'AAAA11', parent_id: 3},
{ id: 7, name: 'AAAA12', parent_id: 3},
{ id: 8, name: 'BBBB11', parent_id: 5},
{ id: 9, name: 'BBBB12', parent_id: 5}
]
//list 转成树形json
var tree=listToTree(list,0); //调用函数,传入要转换的list数组,和树中顶级元素的pid
//处理
var option_data = creatSelectTree(tree);//调用函数,处理数据
//list 转成树形json
function listToTree(list,parent_id) {
var ret = [];
for(var i in list) {
if(list[i].parent_id == parent_id) {
list[i].children = listToTree(list, list[i].id);
ret.push(list[i]);//把当前项保存到临时数组中
}
}
return ret;//递归结束后返回结果
}
//处理
var j="-";
function creatSelectTree(tree) {
var option = [];
for (var i = 0; i < tree.length; i++) {
if(tree[i].children.length){//如果有子集
option.push({id:tree[i].id,name:j+tree[i].name});
j+="-";//前缀符号加一个符号
option = option.concat(creatSelectTree(tree[i].children));
j=j.slice(0,j.length-1);//每次递归结束返回上级时,前缀符号需要减一个符号
}else{//没有子集直接显示
option.push({id:tree[i].id,name:j+tree[i].name});
}
}
return option;
}
{ id: 1, name: 'AAAA', parent_id: 0},
{ id: 2, name: 'BBBB', parent_id: 0},
{ id: 3, name: 'AAAA1', parent_id: 1},
{ id: 4, name: 'AAAA2', parent_id: 1},
{ id: 5, name: 'BBBB1', parent_id: 2},
{ id: 6, name: 'AAAA11', parent_id: 3},
{ id: 7, name: 'AAAA12', parent_id: 3},
{ id: 8, name: 'BBBB11', parent_id: 5},
{ id: 9, name: 'BBBB12', parent_id: 5}
]
//list 转成树形json
var tree=listToTree(list,0); //调用函数,传入要转换的list数组,和树中顶级元素的pid
//处理
var option_data = creatSelectTree(tree);//调用函数,处理数据
//list 转成树形json
function listToTree(list,parent_id) {
var ret = [];
for(var i in list) {
if(list[i].parent_id == parent_id) {
list[i].children = listToTree(list, list[i].id);
ret.push(list[i]);//把当前项保存到临时数组中
}
}
return ret;//递归结束后返回结果
}
//处理
var j="-";
function creatSelectTree(tree) {
var option = [];
for (var i = 0; i < tree.length; i++) {
if(tree[i].children.length){//如果有子集
option.push({id:tree[i].id,name:j+tree[i].name});
j+="-";//前缀符号加一个符号
option = option.concat(creatSelectTree(tree[i].children));
j=j.slice(0,j.length-1);//每次递归结束返回上级时,前缀符号需要减一个符号
}else{//没有子集直接显示
option.push({id:tree[i].id,name:j+tree[i].name});
}
}
return option;
}