?
上面是一个简单的对象数组转成树形结构数组的一个实现方式: 下面我来解析一下这段代码?
首先 步骤1:把数组传进toTree这个方法创建一个存储结果的res数组和空的map对象,然后forEach遍历data, map[item.id] = item? 这刚代码的意思是把item中的id作为键,然后把item作为值存到map对象中 这里我给你们打印看一下map对象
??? ???? ?步骤2:再次循环data代码中 let parent?= map[item.pid]? 这段代码的意思通过 item的pid去寻找他的父节点看他的父节点是否存在这里我也截图说一下吧.下图第一个箭头 他的pid是1,那么我们看数组里面是找不到id为1的项的,那么就说明他不并在父节点,并且我们就认为他是树形结构的第一层直接走的else这个判断里面 直接把他添加到res中。那我们在看向第二个和第三个箭头,他们的pid分别是2和4,并且id为2和id为4的项都存在,我们就把当前的item也就是当前遍历的这一项放到id和他pid相等的项的children下面。这行代码的意思就是如果?parent.children
?存在且为真值(非空数组),则直接使用?parent.children
;否则,如果?parent.children
?为假值或空数组,则使用一个新的空数组?[]
。到此就转换成了树形的结构??? ??? ? ?
??