树根据id查找节点

目录

1、 根据id查找节点

 2、根据id修改节点的字段

 3、根据id删除节点

 4、删除树结构的所有指定字段

5、给树节点任意字段添加一个随机数id,随机数id自己写


1、 根据id查找节点

  // 根据id查找节点
     findNodeById (nodes, id, idName = 'setKey', childrenName = 'children') {
      for (const node of nodes) {
        console.log(node)
        if (node[idName] === id) {
          return node
        }
        if (node[childrenName]) {
          const foundNode = this.findNodeById(node.children, id, idName, childrenName)
          if (foundNode) {
            return foundNode
          }
    }
  }
  return null
},

 2、根据id修改节点的字段

    // 根据id修改节点的字段
     modifyNodeById (id, form) {
         const node = this.findNodeById(this.rulesValue, id, 'setKey', 'rules')
         if (node) {
           // node = form
           Object.assign(node, form)
         }
},

 3、根据id删除节点

// 根据id删除节点
    deleteObjectById (id, data, idName = 'id', childrenName = 'children') {
          for (let i = 0; i < data.length; i++) {
            if (data[i][idName] === id) {
              data.splice(i, 1) // 删除对应的对象
              return
            }
            if (data[i][childrenName]) {
              this.deleteObjectById(id, data[i][childrenName], idName, childrenName) // 递归遍历子节点
            }
          }
},

 4、删除树结构的所有指定字段

    /** @description 删除树结构的所有指定字段 */
    removeProperties (data) {
      data.forEach(node => {
        if (node.children) {
          node.rules = node.children // 将children属性赋值给rules属性
          delete node.children // 删除children属性
        }
        delete node.setKey // 删除id属性
        if (node.rules) {
          this.removeProperties(node.rules) // 递归遍历子节点
        }
      })
    },

5、给树节点任意字段添加一个随机数id,随机数id自己写

addId (tree) {
      return tree.map(item => {
        const data = item.rules ? this.addId(item.rules) : null
        return {
        ...item,
        setKey: uuid(),
        rules: data, // 这里要判断原数据有没有子级如果没有判断会报错
        children: data,
      }
})
    },

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值