js 树形结构根据条件push新数组

发布于 2022-09-12 22:18:57 字数 1845 浏览 15 评论 0

数据结构↓

const data = [{
        name: '水果大全',
        id: '111',      
        isOpen: true            //把111 push进newData
        children: [{
          name: '浆果类',
          id: '112',
          isOpen: true     //把112 push进newData
          children: [{
            name: '草莓',
            id: '113',
            isOpen: true      //把113 push进newData
          }, {
            name: '桑椹',
            id: '114',
            isOpen: true
          }, {
            name: '黑莓',
            id: '115',
            isOpen: false
          }]
        }, {
          name: '柑橘类',
          id: '116',
          isOpen: true
          children: [{
            name: '橘子',
            id: '117',
            isOpen: true
          }, {
            name: '橙子',
            id: '118',
            isOpen: false
          }]
        }]
      }, {
        name: '奥特曼大全',
        id: '119',
        isOpen: true
        children: [{
          name: '昭和类',
          id: '120',
          isOpen: true
          children: [{
            name: '杰克',
            id: '121',
            isOpen: true
          }, {
            name: '泰罗',
            id: '122',
            isOpen: false
          }, {
            name: '艾斯',
            id: '123',
            isOpen: true
          }]
        }, {
          name: '平成类',
          id: '124',
          isOpen: false
          children: [{
            name: '迪迦',
            id: '125',
            isOpen: false
          }, {
            name: '盖亚',
            id: '126',
            isOpen: false
          }]
        }]
      }]

理想效果↓

const newData = [111, 112, 113, 114, 116, 117, 119, 120, 121, 123]

每一个层级都有isOpen这个字段,遍历所有层级,isOpen为true的话就把同对象里的id PUSH进newData里面

我该怎么操作呢,感谢各位大神大哥的指导,可能对你们来说很简单,但我对树形结构得操作一窍不通,先感谢你们的回答,小弟感激不尽,还请轻喷!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

尐籹人 2022-09-19 22:18:57
// => ["111", "112", "113", "114", "116", "117", "119", "120", "121", "123"]
console.log(deepFindOpenId(data))

function deepFindOpenId (list, result) {
  result = result || [], Array.isArray(list) && list.forEach(item => {
    item.isOpen && result.push(item.id)
    deepFindOpenId(item.children, result)
  })
  return result;
}
一笑百媚生 2022-09-19 22:18:57
function getIdArr(arr) {
  const result = []
  function getId(arr) {
    return arr.forEach(item => {
      if (item.isOpen) {
        result.push(item.id)
      }
      if (item.children) {
        getId(item.children)
      }
    })
  }
  getId(arr)
  return result
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文