Echarts多排柱状图动态处理,动态渲染数据处理

23 篇文章 0 订阅
4 篇文章 1 订阅

后端返回的数据格式是一般的数据格式,前端处理还是比较复杂,此处做个记录

数据格式
在这里插入图片描述

效果图 X轴年月和每一组的柱状图条数都是动态的

在这里插入图片描述

代码中的输出数据格式

在这里插入图片描述

代码

getData就是获取后端数据的接口
 getDataval).then((res) => {
          if (res.code == 200) {
            var main = []
            var arr3Year = []
            var dataYList = []
            // 系列的具体数据
            var arr5 = []
            arr3Year = res.data.headers //获取所有月份
            main = res.data.datas //获取所有印厂对应月份信息
            var objDatas = [] //图例数组
            var yinChang = {}
            var yinChang_monthNum = {} //自定义有数据的印厂名称+月份 用于后面对象遍历对比
            //首先先遍历第一层数组,数组中包含了二层的数组,且个数是动态不确定的
            main.forEach((key, index) => {
              var obj = main[index] //获取一级数组的每一项,index是一级数组的每一层的索引
              obj.forEach((key1, index1) => {
                //遍历二级数组的每一项
                console.log('印厂数据', obj[index1].yinChang)
                objDatas.push(obj[index1].yinChang) //给图例数组添加数据
                //核心的处理方式就在此处
                var pName = obj[index1].yinChang //给对象添加印厂属性名称
                var mName = obj[index1].yearMonth //给对象添加年月份属性名称
                var day = obj[index1].yinShuaTS //给对象添加天数属性名称
                yinChang[pName] = day //将每一个天数赋值给pName属性
                yinChang_monthNum[pName + '_' + mName] = day
              })
            })
            console.log(
              '输出合成印厂+年份:天数格式的对象属性',
              yinChang_monthNum
            )
            var dataArr = []
            console.log('印厂数据对象', yinChang)
            for (const key in yinChang) {
              //遍历对象,将印厂名称和合成的对象中的属性名进行对比
              var objYC = {}
              objYC.name = key
              var YCArr = []
              arr3Year.forEach((key1, index1) => {
                //将新合成的对象yinChang_monthNum 中的两个印厂名称和 年月份对比
                var num = yinChang_monthNum[key + '_' + key1]
                console.log(typeof num)
                //因为相同年月份有的印厂多,有的少,判断如果没有就插入 0 ,有的话获取对应的天数
                if (typeof num != 'undefined') {
                  YCArr.push(num)
                } else {
                  YCArr.push(0)
                }
              })
              objYC.data = YCArr
              objYC.type = 'bar'
              objYC.barWidth = '40'
              dataArr.push(objYC)
            }
            dataYList = dataArr
            this.optiondataStack = {
              color: [
                '#4785ed',
                '#4ab92e',
                '#e25da8',
                '#ffff00',
                '#a075b9',
                '#ffaaff',
              ],
              legend: {
                data: objDatas,
              },
              tooltip: {
                trigger: 'axis',
                axisPointer: {
                  type: 'shadow',
                },
              },
              xAxis: {
                data: arr3Year,
              },
              yAxis: {},
              series: dataYList,
            }
          }
        })
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值