数据结构↓
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
}