트 리 데이터 구조 와 평면 데이터 상호 변환

23772 단어 js
트 리 데이터 구조: 트 리 데이터 구 조 는 중요 한 비 선형 데이터 구조 이다.트 리 데이터 구 조 는 데이터 시트 소 간 의 한 쌍 이상 의 관 계 를 나 타 낼 수 있다.그 중에서 나무 와 이 진 트 리 가 가장 많이 사용 되 는데 직관 적 으로 볼 때 나 무 는 분기 관계 로 정 의 된 차원 구조 이다.트 리 데이터 구 조 는 객관 적 인 세계 에서 광범 위 하 게 존재 한다. 예 를 들 어 인류 사회의 족보 와 각종 사회 조직 기 구 는 모두 트 리 데이터 구조 로 이미지 표현 할 수 있다.
평면 데이터 구조: 다음 과 같다.
1. 납작한 나무 모양
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);
//    :
function toTree(data) {
    //       children,       
    data.forEach(function (item) {
        delete item.children;
    });
    //          id   KEY   map      
    var map = {};
    data.forEach(function (item) {
        map[item.id] = item;
    });
    var val = [];
    data.forEach(function (item) {
    	//       , pid, map        id
        var parent = map[item.pid];
            //    ,      ,            ,          ,       
            if (parent) {
                (parent.children || ( parent.children = [] )).push(item);
            } else {
                //     map        ID,         item    val    ,    
                val.push(item);
            }
        });
        return val;
}
    console.log(toTree(data))

2. 나무 모양 이 납작 하 게 변 한다.
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);

좋은 웹페이지 즐겨찾기