treeData数据快速排序

406 阅读1分钟

antd的treeSelect组件的treeData

这个方法是转载的,但是出处忘记了,有看到的话联系下哈。

今天需要把后端给的一个对象数组快速排序为需要的treeData。然后去网上搜索了下,发现了一下这个简单的方法

     let tree = cloneData.filter((father) => {              //循环所有项
               let branchArr = cloneData.filter((child) => {
                  return father._id === child.parentId      //返回每一项的子级数组
               });
               if (branchArr.length > 0) {
                  father.children = branchArr;    //如果存在子级,则给父级添加一个children属性,并赋值
               }
               return father.parentId === '-1';      //返回第一层
            });

这个排序的原理其实很简单,核心是利用了数据污染。

     let cloneData = JSON.parse(JSON.stringify(data)).map(v => ({
               title: v.name,
               value: v._id,
               key: v._id,
               parentId: v.parentId,
               _id: v._id,
               children: []
            }))    // 对源数据深度克隆

同时为了保证数据可以直接改造为treeData类型,所以我先进行了简单的深度克隆,然后使用map返回了一个新数组。

很简单吧!!!