1. 程式人生 > >將一條一條的json轉成樹形結構

將一條一條的json轉成樹形結構

本人寫的一個小例子,閒話不說,上程式碼

		var nodes = [
			{"id":2,"cname":"第一級1","ipid":0,"ccode":"1"},
			{"id":3,"cname":"第一級1","ipid":2,"ccode":"1"},
			{"id":4,"cname":"第一級1","ipid":2,"ccode":"1"},
			{"id":5,"cname":"第一級1","ipid":4,"ccode":"1"},
			{"id":6,"cname":"第一級1","ipid":3,"ccode":"1"},
			{"id":7,"cname":"第一級1","ipid":0,"ccode":"1"}
		]		
		function transDate(list,idstr,pidstr){
			var result = [],temp = {};
			for(i = 0; i < list.length; i++){
				temp[list[i][idstr]]=list[i];//將nodes陣列轉成物件型別
			}
			for(j=0; j<list.length; j++){
				tempVp = temp[list[j][pidstr]]; //獲取每一個子物件的父物件
				if(tempVp){//判斷父物件是否存在,如果不存在直接將物件放到第一層
					if(!tempVp["nodes"]) tempVp["nodes"] = [];//如果父元素的nodes物件不存在,則建立陣列
					tempVp["nodes"].push(list[j]);//將本物件壓入父物件的nodes陣列
				}else{
					result.push(list[j]);//將不存在父物件的物件直接放入一級目錄
				}
			}
			return result;
		}
		
		console.log(transDate(nodes,"id","ipid")); //傳入的值 列表 ,本物件的id,父物件的id
		document.write(JSON.stringify(transDate(nodes,"id","ipid")));
這個主要知識點就是物件的引用關係,只需要兩個迴圈,就將列表式的結構資料,轉成的樹形結構。