zoukankan      html  css  js  c++  java
  • json数据怎么根据ID找索引值


      { 
       id: 1, 
       childNode: [ 
            {  
              id: 2, 
              name: '哈哈哈’ 
            } 
         ] 
      }, 
      { 
        id: 3,  
        childNode: [ 
            {  
              id: 4, 
              name: '哈哈哈’ 
            } 
         ] 
       } 
    ]

    如果传入一个id = 2,那么返回他的父级索引值,加上他自己的索引

    如果传入一个id = 1,那么返回他自己的索引,他子节点索引为空      
     怎么写个递归呢

    function indexesOf(data, id) {
        for(let i = 0;i<data.length;i++) {
        const item = data[i];
        if(item.id == id) return [i];
        if(item.childNode) {
          const childIndexes = indexesOf(item.childNode, id);
          if(childIndexes) return [i].concat(childIndexes);
        }
      }
    }

     vue中的使用

      // 当前选中的节点的index,如果当前点击节点的id是容器的子节点,那么就返回父级节点的索引,加上容器的子节点索引
        activeElementIndex (state) {
          // 根据ID找索引值
          function indexesOf (data, id) {
            for (let i = 0; i < data.length; i++) {
              const item = data[i]
              if (item.uuid === id) return [i]
              if (item.childNode && item.childNode.length > 0) {
                const childIndexes = indexesOf(item.childNode, id)
                if (childIndexes) return [i].concat(childIndexes)
              }
            }
          }
          return indexesOf(state.projectData.elements, state.activeElementUUID)
        },
        // 根据子节点的id获取父节点的信息
        getParentInfo: (state) => (id) => {
          // 根据ID找父节点的id
          function findParentId (data, id) {
            let result
            if (!data) return
            for (let i = 0; i < data.length; i++) {
              const item = data[i]
              if (item.uuid === id) {
                result = item
                // 找到id相等的则返回父节点
                return result
              } else if (item.childNode && item.childNode.length > 0) {
                // 如果有子集,则把子集作为参数重新执行本方法
                result = findParentId(item.childNode, id)
                if (result) {
                  return data[i]
                }
              }
            }
          }
          return findParentId(state.projectData.elements, id)
        }
  • 相关阅读:
    PostgreSQL恢复误操作
    PostgreSQL修改表空间
    vim技巧记录
    postgresql recovery.conf文件内容说明
    转一篇pgpool配置
    由PostgreSQL的区域与字符集说起(转)
    PostgreSQL老司机博客 经常翻翻收获不小
    两位数相乘的口算方法
    五线谱升调与降调
    js中的封装、继承、多态
  • 原文地址:https://www.cnblogs.com/plBlog/p/12439153.html
Copyright © 2011-2022 走看看