前端 数据结构问题

发布于 2022-09-13 01:22:33 字数 494 浏览 28 评论 0

如果说有一段JSON是

[
  {
      name:'A',
      event:[
          {
            on:['change1']
          }
      ]
  },
  {
    name:'B',
    event:[
        {
            on:['change2']
        }
    ],
    child:[
        {
            name:'B',
            event:[
                {
                    on:['change2']
                }
            ],
            child:[
                ... 如此继续层叠
            ]
        },
    ]
  },
]

有什么办法能够最快速度找到 所有的on属性里面的内容呢

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

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

发布评论

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

评论(3

愿得七秒忆 2022-09-20 01:22:33

树形数据结构的遍历都是要递归的,就看是怎么递归,广度优先还是深度优先,看你自己选择,数据量非常大,为了避免爆栈,建议广度优先,下面是一个深度优先的写法

function _find(arr, callback){
    arr.forEach(item => {
        item.event.forEach(eitem => {
            callback(eitem.on)
        })
        if(Array.isArray(item.child)){
            _find(item.child, callback)
        }
    })
}

_find(arr, function(list){
    console.log(list)
})
// ['change1']
// ['change2']
// ['change2']

PS:可以详细说下你的需求,只是找到所有的on属性,这个太宽泛了,具体的代码没法写

微凉徒眸意 2022-09-20 01:22:33
let list =[
  {
      name:'A',
      event:[
          {
            on:['change1']
          }
      ]
  },
  {
    name:'B',
    event:[
        {
            on:['change2']
        }
    ],
    child:[
        {
            name:'B',
            event:[
                {
                    on:['change2']
                }
            ]
        },
    ]
  },
];

let getTree=(list=[])=>list.flatMap(item=>item.event.flatMap(item=>item.on).concat(getTree(item.child || [])));
console.log(getTree(list));
// ['change1', 'change2', 'change2']
梦里泪两行 2022-09-20 01:22:33

不需要这么复杂,一般这种场景最快的方法肯定是正则匹配咯

let paragraph = JSON.stringify(obj);
let regex = /(?<="on"\:\[)(.*?)(?=\])/g;
let found = paragraph.match(regex);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文