jQuery 操作 JSON 對象 修改 ztree 結構
- 2019 年 12 月 4 日
- 筆記
前一篇提到了 ztree 渲染用戶列表,在渲染列表的時候遇到了需要對 JSON 對象進行操作,來改變 ztree 的結構。
ztree 引用了系統中 部門試圖的數據集結果,存儲為一個 json 對象。其中,通過每個數據的 ParentId 來對應關聯樹狀結構。
需求是,將其中的第二級菜單,也就是部門員工的頭銜給刪掉。
現有的數據結構大致如下:

所以,思路就是通過遍歷,篩選出 type = 0
的數據的 ParentId 為 type = 2
的 id 的數據,並將其 ParentID 賦值為 type = 2
的 ParentId 的數據。
說起來很拗口,看程式碼:
//odata 元數據, 通過操作後,push 到新的 data 數據 var [email protected](ViewBag.Department); odata.push({ Id: "0", ParentId: null, Name: '組織機構', Type: typeRoot, open: true }); var data = []; //通過type 刪除職位 for (var o in odata) { if (odata[o].Type != 2) { var item = {}; $.extend(item, odata[o]); if (odata[o].Type == 0) { for (var j in odata) { if (odata[o].ParentId == odata[j].Id) { //odata[o].ParentId = odata[j].ParentId; item.ParentId = odata[j].ParentId; console.log(odata[o].ParentId + " " + odata[j].ParentId); } } } data.push(item); } }
注意:其中最主要的是 $.extend(item, odata[o]);
這個操作。 因為如果直接進行 =
賦值,就會導致數據值判斷條件被覆蓋,從而遍歷異常,而操作無效。
原本我是打算使用 odata[o].ParentId = odata[j].ParentId;
這樣在遍歷之後,會再經行一次 PraentId 的賦值,導致整個數據集的異常。
在同事指導下,使用 jQuery 的 extend() 來進行操作。
官方示例:
//jQuery 程式碼: var settings = { validate: false, limit: 5, name: "foo" }; var options = { validate: true, name: "bar" }; jQuery.extend(settings, options); //結果: //settings == { validate: true, limit: 5, name: "bar" }