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" }