我就直接上代码吧!直接在浏览器跑下就知道了! 各位大神 就是报了个错
function objectIterator (object, arr, objStack) {
let count = 0
if (!arr.length) {
return
}
if (arr.indexOf(object.id) > -1) {
object.disabled = true
}
if (object.children.length) {
objStack.push(object)
} else {
return
}
console.warn(objStack.length, objStack[0])
while (objStack.length) {
for (let i = count; i < objStack[objStack.length - 1].children.length; i++) {
this.objectIterator(objStack[objStack.length - 1].children[i], arr, objStack)
}
let obj = objStack.pop()
if (obj.parent && obj.parent.children && Array.isArray(obj.parent.children)) {
count = obj.parent.children.indexOf(obj) + 1
} else {
count = 0
}
}
}
let obj = {
id: '1',
name: '1name',
disabled: false,
parent: null,
children: [{
id: '2',
name: '2name',
disabled: false,
children: [{
id: '5',
name: '5name',
disabled: false,
children: []
}]
}, {
id: '3',
name: '3name',
disabled: false,
children: []
}, {
id: '4',
name: '4name',
disabled: false,
children: []
}]
}
obj.children.forEach(item => {
item.parent = obj
})
obj.children[0].children.forEach(item => {
item.parent = obj.children[0]
})
objectIterator(obj, ['1', '2', '5'], [])
console.warn(obj)
题主把其他的 console 注释掉,在 while 里面加一个 console
报错的原因是,你在 for 循环里递归的时候,报错之前已经把 objStack 清空了,所以在 for 循环里 objStack[objStack.length - 1].children 这样用的时候,相当于objStack[-1].children ,objStack 是个空数组,当然报错了,,
解决办法:我给你没有办法参与循环的时候,直接跳出了 while 循环,不知道是不是你想要的结果:
代码不加分号,可读性差