echarts旭日图数据重构处理

echarts旭日图数据重构处理网上对于旭日图的数据结构处理资料很少,所以自己记录一下。首先看旭日图需要的数据结构://旭日图{name:’淘宝’,children:[{name:’女装’,children:[{name:’上衣’,value:22},{name:’裙子’,value:12},

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

网上对于旭日图的数据结构处理资料很少,所以自己记录一下。
首先看旭日图需要的数据结构:

// 旭日图
  { 
   
    name: '淘宝',
    children: [
      { 
   
        name: '女装',
        children:[
        { 
   
          name:'上衣',
          value:22
        },
        { 
   
          name:'裙子',
          value:12
        },
        { 
   
          name:'裤子',
          value:18
        }]
      },{ 
   
        name:'男装',
        children:[],
      }
    ]
  }

其实就是树状结构数据。
待处理数据:
在这里插入图片描述
表格中数据:

var data = [
      ["名称","分类","装扮","总销量"],
      ["淘宝", "女装","上衣","220"],
      ["", "","裙子","120"],
      ["", "","裤子","180"],
      ["", "男装","上衣","230"],
      ["", "","裤子","240"],
      ["京东", "男装","裤子","152"],
      ["", "童装","童装","180"],
      ["", "女装","上衣","240"],
      ["", "","裤子","145"],
      ["拼多多", "男装","上衣","160"],
      ["", "","裤子","240"],
      ["", "","内衣","190"],
      ["", "","运动装","210"],
      ["", "童装","童装","170"],
    ]

这段数据要处理成旭日图能用的数据:

xuritu: (data) => { 
   
    var deal_data = data;   //第一次处理 将第一级分类分出来
    // var r_length = data[0].filter(str => !!str).length; //第一项总长度
    // deal_data.shift();
    var sortArr = [];
    for (var i = 1; i < deal_data.length; i++) { 
   
      if (i != 0 && i != deal_data.length && data[i][0] != '' && data[i][0] != data[i - 1][0]) { 
   
        if (i) { 
   
          var feileiArr = [];
          var l = 0;
          for (var z = 0; z < sortArr.length; z++) { 
   
            l = l + sortArr[z].length;
          }
          for (var j = l; j < i; j++) { 
   
            feileiArr.push(deal_data[j])
          }
          sortArr.push(feileiArr);
        }
      }
    }
    //第二次处理,将每一个数据加上id和父级id,用id进行关联
    var _sortArr = sortArr;
    console.log(_sortArr)
    var result_data = [];
    for(var y=0;y<_sortArr.length;y++){ 
   
      var first_res_data = { 
   
        name:_sortArr[y][0][0],
        children:[]
      }
      first_res_data.children = setTreeData(secondDeal(_sortArr[y]));
      result_data.push(first_res_data);
    }
    //这个方法用于加上id
    function secondDeal(sortArr) { 
   
      var second_d_data = []
      for (var i = 0; i < sortArr.length; i++) { 
   
        for (var j = 1; j < sortArr[i].length - 1; j++) { 
   
          var _parentId;
          if (i == 0) { 
   
            _parentId = i + "-" + (j - 1)
          } else { 
   

            for (var z = 0; z < 20; z++) { 
   
              if ((((i - z) > 0) || ((i - z) == 0)) && sortArr[i - z][j - 1]) { 
   
                _parentId = (i - z) + "-" + (j - 1)
                break;
              }
            }
          }
          if (!Number(sortArr[i][j]) && sortArr[i][j]) { 
     //去除最后一项,等同于合并最后一项与倒数第二项
            var d;
            if (Number(sortArr[i][j + 1])) { 
   
              d = { 
   
                id: i + "-" + j,
                name: sortArr[i][j],
                value: parseInt(sortArr[i][j + 1]),
                parentId: _parentId
              }
            } else { 
   
              d = { 
   
                id: i + "-" + j,
                name: sortArr[i][j],
                parentId: _parentId
              }
            }
            second_d_data.push(d);
          }

        }
      }
      return second_d_data;
    }
    //处理成树状结构
    function setTreeData(arr) { 
   
      // 删除所有的children,以防止多次调用
      arr.forEach(function (item) { 
   
        delete item.children;
      });
      let map = { 
   }; //构建map
      arr.forEach(i => { 
   
        map[i.id] = i; //构建以id为键 当前数据为值
      });
      let treeData = [];
      arr.forEach(child => { 
   
        const mapItem = map[child.parentId]; //判断当前数据的parentId是否存在map中
        if (mapItem) { 
   
          //存在则表示当前数据不是最顶层的数据
          //注意: 这里的map中的数据是引用了arr的它的指向还是arr,当mapItem改变时arr也会改变,踩坑点
          (mapItem.children || (mapItem.children = [])).push(child); //这里判断mapItem中是否存在child
        } else { 
   
          //不存在则是顶层数据
          treeData.push(child);
        }
      });
      return treeData;
    }
    result_data.shift();  //去除第一项
    return result_data;
  },

第一次处理的数据:
在这里插入图片描述
将三种不同类型分别分出来

第二次处理: ,并给每一项加上id和父级id
在这里插入图片描述
最后效果:
在这里插入图片描述

完工!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189424.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JRTPLIB_刘伯温传简介

    JRTPLIB_刘伯温传简介jrtplib是一个基于C++、面向对象的RTP封装库,最新的版本是3.9.1(2011年11月)。为了与RFC3550相兼容,3.x.x版本经过完全重写,现在它提供了一些非常有用的组件,这些组件为构建各种各样的RTP应用程序开发提供了有用的帮助。较旧的2.x版本依然可用,但是不兼容RFC3550。1.特性    jrtplib支持定义于RFC3550中的RTP协议,它使得发送和接

    2022年7月28日
    2
  • Linux tomcat安装详解

    Linux tomcat安装详解欢迎访问我的个人博客网站:http://www.yanmin99.com/一、tomcat安装1、下载JDK和Tomcat//通过wget下载wgethttp://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.4/bin/apache-tomcat-8.5.4.tar.gzwgethttp://download.ora

    2022年6月2日
    30
  • javamethod用法_method

    javamethod用法_methodClass类getMethod()方法getMethod()方法在java.lang包中可用。getMethod()方法用于返回Method对象,这些对象指示该类的给定公共方法或由此Class对象表示的接口。getMethod()方法是一种非静态方法,只能通过类对象访问,如果尝试使用类名称访问该方法,则会收到错误消息。getMethod()方法在返回Method对象时可能会引发异常。NoSuchM…

    2022年9月23日
    2
  • php 0xffffffff,0xffffffff – 依睛(IT blog) 我回来了,PHPC/C++ LINUX – IT博客「建议收藏」

    php 0xffffffff,0xffffffff – 依睛(IT blog) 我回来了,PHPC/C++ LINUX – IT博客「建议收藏」今早ssjjll问我一个位操作的问题,原本以为非常easy的,可是程式的输出总是不尽人意。开始认为是编译器的错误,后来看文件才知道是自己学业不精,乃功力不足所致。失望!对C我一直认为全掌控了,而C++也练到了7、8重的境界,不料今日还是阴沟翻船。记下来,勿忘瓜耻!先看出现问题的代码:inta=32;intx=0xFFFFFFFF;cout<<int(0xFFFFFFFF…

    2022年5月17日
    42
  • Spring学习– SpEL表达式

    Spring学习– SpEL表达式转载自 https://www.cnblogs.com/goodcheap/p/6490896.html目录Spring表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言。语法类似于EL:SpEL使用#{…}作为定界符,所有在大括号中的字符都将被认为是SpEL,SpEL为bean的属性进行动态赋值提供了便利。通过SpEL可以实现:通过…

    2025年9月2日
    7
  • sop流程图模板_标准作业流程SOP详解,附流程图绘制规范,不愁不会画!

    sop流程图模板_标准作业流程SOP详解,附流程图绘制规范,不愁不会画!原标题:标准作业流程SOP详解,附流程图绘制规范,不愁不会画!什么是SOP?StandardOperationProcedure所谓SOP,是StandardOperationProcedure三个单词中首字母的大写,即标准作业程序。是以文件的形式描述作业员在生产作业过程中的操作步骤和应遵守的事项;是作业员的作业指导书;是检验员用于指导工作的依据。“制造”就是以规定的成本、规定的工时…

    2022年5月26日
    68

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号