1. 程式人生 > >js把屬性具有父子關係的json檔案轉變成json樹

js把屬性具有父子關係的json檔案轉變成json樹

方法也是百度來的,親測可用

希望能幫助到大家

<script>
		var data = [{
			"address": "蕪湖弋江區",
			"id": "1",
			"latitude": 31.379996,
			"longitude": 118.424139,
			"name": "測試站點1",
			"pId": "SK",
			"siteClass": "DQ",
			"siteType": "SK",
			"updateDataTime": "2018-10-19 00:00:00"
		}, {
			"address": "蕪湖三山區",
			"id": "2",
			"latitude": 31.369996,
			"longitude": 118.414139,
			"name": "測試站點2",
			"pId": "GK",
			"siteClass": "DQ",
			"siteType": "GK",
			"updateDataTime": "2018-10-19 00:00:00"
		}, {
			"id": "GK",
			"name": "國控",
			"pId": "0"
		}, {
			"id": "SK",
			"name": "省控",
			"pId": "0"
		}]

		function toTree(data) { // 刪除 所有 children,以防止多次呼叫 
			data.forEach(function(item) {
				delete item.children;
			}); // 將資料儲存為 以 id 為 KEY 的 map 索引資料列
			var map = {};
			data.forEach(function(item) {
				map[item.id] = item;
			}); //        console.log(map); 
			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))
	</script>