问答

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

作者:admin 2021-05-05 我要评论

数据结构↓ const data = [{ name: '水果大全', id: '111', isOpen: true //把111 push进newData children: [{ name: '浆果类', id: '112', isOpen: true //把11...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

数据结构↓

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里面

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

###
// => ["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;
}
###

https://github.com/Lushenggan...

###
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
}

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • js 树形结构根据条件push新数组

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

  • 请问echarts的环图如何在中心显示固定

    请问echarts的环图如何在中心显示固定

  • 请问如何练习才能提高程序能力呢?

    请问如何练习才能提高程序能力呢?

  • springcloud使用网飞(netffix)还是开

    springcloud使用网飞(netffix)还是开

腾讯云代理商
海外云服务器