这样的tree数据结构怎么给每个项加属性?

给树状节点都有两子节点childrenemployeeList都加了一个isCheck的属性,现在我想在children下的节点加tyle=1employeeList下加type=2,请问改怎么改呢

export function addIsCheck(array) {
    array.forEach(function(el) {
        el.isCheck = false
        if (!el.children || el.children.length == 0) {
            return
        } else {
            addIsCheck(el.children)
        }
        if (!el.employeeList || el.employeeList.length == 0) {
            return
        } else {
            addIsCheck(el.employeeList)
        }
    })
}

// 大概的数据结构
arr = [
    {
        id:'1',
        children:[{},{},{}],
        employeeList:[{},{},{}],
        isCheck:false
    }
]
阅读 1.7k
2 个回答

function addKeyValueToArr(list, key, value) {
    return list.map(item => {
        if (item.children) {
            addKeyValueToArr(item.children, key, value)
        }

        return Object.assign(item, {
            [key]: value
        })
    })
}

function handleArr(arr) {
    return arr.map(item => {
        let { children, employeeList } = item

        addKeyValueToArr(children, 'type', 1)
        addKeyValueToArr(employeeList, 'type', 2)
        console.log(children)
        return Object.assign(item, {
            isCheck: false
        })
    })
}

仔细想了一下,你的逻辑恐怕有问题,并不是type=1和type=2的问题。
感觉上chilren是基于组织的,所以有树形,但是employee就是一个单纯的数组,是节点的普通属性而已。
所以,isCheck应该是指节点是否被选中,employeeList中的项应该带有自己的isCheck,而不是两者共享一个isCheck然后用type来区分是选中的节点还是employee。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题