父子关系的数组,转换成树形结构
translateDataToTree(list){ //筛选出 包含parentId的数组; let parents=list.filter(value => value.parentId == 0); //筛选出 包含不parentId的数组; let childrens = list.filter(value => value.parentId !== 0); //运用递归方法将子数组插入到父数组 let translator = (parents, childrens) => { //遍历每一个父数组 parents.forEach((parent)=>{ //遍历子数组 判断子节点的parentId等于父数组的id, childrens.forEach((child, index) => { if (child.parentId === parent.id) { //对子节点数据进行深复制 let temp = JSON.parse(JSON.stringify(childrens)); //让当前子节点从temp中移除,temp作为新的子节点数据,这里是为了让递归时,子节点的遍历次数更少,如果父子关系的层级越多,越有利 temp.splice(index, 1); //让当前子节点作为唯一的父节点,去递归查找其对应的子节点 translator([child], temp); //把找到子节点放入父节点的ChildNodes属性中 typeof parent.ChildNodes !== undefined ? parent.ChildNodes.push(child) : parent.ChildNodes = [child]; } }) }) }; translator(parents, childrens) //返回最终的结果 return parents },
下一篇:
爬子第一篇:zol手机型号参数抓取