关于forEach的问题

来源:13-2 电子书树状目录展示

Kunen

2020-07-10

只有在 c.pid 的值为空的情况下才会将当前的 ‘c’ push 到 chapterTree, 相当于只会将所有的"父章节" push 到 chapterTree 中,那为什么最终输出的结果是 chapterTree[0].children 中的包含有"子章节",else 里面并没有对 chapterTree 有别的操作啊,怎么就影响到 chapterTree呢,究竟 “子章节” 是怎么被 push 到 chapterTree 里的,受了哪行代码的影响?
js 基础知识有些薄弱,苦恼了许久,望老师解答,谢谢!

图片描述

测试代码:

var arr = [
  {
    id: '1',
    pid: '',
  },
  {
    id: '1.1',
    pid: '1',
  },
  {
    id: '1.2',
    pid: '1',
  },
  {
    id: '2',
    pid: '',
  }
]
var newArr = []
arr.forEach(item => {
    item.children = []
    if (item.pid === '') {
        newArr.push(item)
    } else {
        const parent = arr.find(c => c.id === item.pid)
        parent.children.push(item)
    }
})
写回答

1回答

扬_灵

2020-07-10

同学你好,这个逻辑是这样的,先遍历arr或者arr中每个对象,判断对象中是否存在pid,如果不存在pid就表示这个一级元素直接push到newArr中,如果存在pid表示这个对象是一级对象的子级,然后使用find函数查找arr数组中id===当前对象的pid,给这个对象添加一个childred属性将二级对象push进去,如果不能解决你的问题,可以继续追问。

0
3
Kunen
回复
扬_灵
我明白了,push 到 newArr 的对象其实是数据引用的方式
2020-07-13
共3条回复

Vue Element+Node.js开发企业通用管理后台系统

基于Element的中后台课程,一套中小型企业通用的后台管理系统

2829 学习 · 1714 问题

查看课程