我现在有一个数组对象,数组中的每个对象下可能存在子集,也可能不存在,目前我用循环递归的方法把数据解析出来了,但是我现在不知道该怎么在数组的每一层添加它们自己的标识,意思就是说,如果数组中的某一项没有子集,则该数组的层次是1;如果数组中的某一项有子集,且这个子集自己也有子集,那这一项的层次该如何标识出来,具体的代码和截图可以看下面的描述
`
let arr = [
{
title: '我是标题1,我没有子集',
href: 'xxxxx',
children: []
},
{
title: '我是标题2,我没有子集',
href: 'xxxxx',
children: [
{
title: '我是标题2的子集,我没有子集',
href: 'xxxxx',
children: []
},
{
title: '我是标题2的子集,我没有子集',
href: 'xxxxx',
children: []
},
{
title: '我是标题2的子集,我有子集',
href: 'xxxxx',
children: [
{
title: '我是标题2的子集的子集,我没有子集',
href: 'xxxxx',
children: []
},
{
title: '我是标题2的子集的子集,我没有子集',
href: 'xxxxx',
children: []
},
{
title: '我是标题2的子集的子集,我没有子集',
href: 'xxxxx',
children: []
}
]
}
]
},
{
title: '我是标题3,我有子集',
href: 'xxxxx',
children: []
}
]
arr.forEach(item => {
test(item)
})
function test(item) {
if (item.children.length) {
item.children.forEach(ele => {
ele.div = '<div>'+ele.title+'</div>'
test(ele)
})
} else {
item.div = '<div>'+item.title+'</div>'
}
}
console.log(arr)
`
如上描述,有人能给出一个解决方法或者提示信息吗?多谢各位
看你的需求,用递归来做会好一些,但是这个尾递归很难进行优化
因为这个类似的需求肯定是要先获取到最深层的节点,为了避免一些重复计算,就很难做成尾递归的形式,因为上次调用栈的信息需要存储,在内部函数执行完毕后拿到结果再进行赋值:
P.S. 这两个函数可以合并为一个,就留给你自己练手咯