前端 数据结构问题
如果说有一段JSON是
[ {
name:'A',
event:[
{
on:['change1']
}
]
},
{
name:'B',
event:[
{
on:['change2']
}
],
child:[
{
name:'B',
event:[
{
on:['change2']
}
],
child:[
... 如此继续层叠
]
},
]
},
]
有什么办法能够最快速度找到 所有的on属性里面的内容呢
回答:
树形数据结构的遍历都是要递归的,就看是怎么递归,广度优先还是深度优先,看你自己选择,数据量非常大,为了避免爆栈,建议广度优先,下面是一个深度优先的写法
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属性
,这个太宽泛了,具体的代码没法写
回答:
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']
回答:
不需要这么复杂,一般这种场景最快的方法肯定是正则匹配咯
let paragraph = JSON.stringify(obj);let regex = /(?<="on"\:\[)(.*?)(?=\])/g;
let found = paragraph.match(regex);
以上是 前端 数据结构问题 的全部内容, 来源链接: utcz.com/p/936105.html