• 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)
        }
  • 相关阅读:
    phpExcel常用方法详解 F
    简单的图片变色方法 F
    TCP协议数据包及攻击分析
    你好世界
    团队项目 第一次作业
    NOIP提高组(2018)考试技巧及注意事项
    ACM常用模板数论
    ACM常用模板图论
    ACM常用模板数据结构
    I'm Coming
  • 原文地址:https://www.cnblogs.com/plBlog/p/12439153.html
Copyright © 2020-2023  润新知