前端 数据结构问题

前端 数据结构问题

如果说有一段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

回到顶部