扁平转树,数转扁平

844 阅读1分钟

1.树转扁平


var data=[
	{id: "a",pid: 0,value: "陕西",children:[
		{id: 01,pid: "a",value: "西安"},
		{id: 02,pid: "a",value: "渭南"},
		{id: 03,pid: "a",value: "咸阳"},
	]},
	{id: "b",pid: 0,value: "广东",children:[
		{id: 11,pid: "b",value: "广州"},
		{id: 12,pid: "b",value: "深圳"},
		{id: 13,pid: "b",value: "潮汕"},
	]},
	{id: "c",pid: 0,value: "湖南",children:[
		{id: 21,pid: "c",value: "长沙"},
		{id: 22,pid: "c",value: "常德"},
		{id: 23,pid: "c",value: "岳阳"},
	]},	
];
function toLine(data){
	return data.reduce((arr, {id, value, pid, children = []}) =>
    	arr.concat([{id, value, pid}], toLine(children)), [])
		return result;
}
var listarr=toLine(data);
console.log(listarr);

2.扁平转树

var data=[
{pid:0,id:'a',value:'陕西'},
	{pid:'a',id:01,value:'西安'},
		{pid:01,id:301,value:'雁塔区'},
		{pid:01,id:302,value:'高新区'},
	{pid:'a',id:02,value:'渭南'},
	{pid:'a',id:03,value:'咸阳'},
{pid:0,id:'b',value:'广东'},
	{pid:'b',id:11,value:'广州'},
	{pid:'b',id:12,value:'深圳'},
	{pid:'b',id:13,value:'潮汕'},
{pid:0,id:'c',value:'湖南'},
	{pid:'c',id:21,value:'长沙'},
	{pid:'c',id:22,value:'常德'},
	{pid:'c',id:23,value:'岳阳'},
];
function toTree(data){
  let cloneData = JSON.parse(JSON.stringify(data))    // 对源数据深度克隆
  let tree = cloneData.filter((father)=>{              //循环所有项
        let branchArr = cloneData.filter((child)=>{
            return father.id == child.pid;//返回每一项的子级数组
        });
        if(branchArr.length>0){
            father.children = branchArr; //如果存在子级,则给父级添加一个children属性,并赋值
        }
        return father.pid==0;//返回第一层
    });
    return tree;    //返回树形数据
}
var tree=toTree(data);
console.log(tree);