美文网首页
echart图,数据补零逻辑

echart图,数据补零逻辑

作者: 乐宝呗 | 来源:发表于2022-08-05 13:46 被阅读0次

    最近在写一些数据展示的需求,表现形式有柱状图 折线图 饼状图等等之类,其中 柱状图拿到的数据 如果由于其中某一天没有相关数据,那么这一天的数据在柱状图中的表现形式就是空的,会被直接跳过,表现形式很不好。这个时候就需要将这一天的日期加上,并且将这一天的数据结果补为0。

      具体步骤我是这样做的,觉得很有意思 特意记录下来,同时防止下次可能会有用到的时候。

      第一步 将后台返回的数据中的日期拿到,计算出总共是几天的数据。

      第二步 拼凑出完整的日期数组(不间断的数据)

      第三步 循环该日期数组,对比后台返回的数据中的日期,如果日期相等,则push对应的内容,如果不相等则push(0)

      第四步 由于后台返回的数据可能和自己生成的日期数组长度不同,所以循环日期数组时,日期下标对应的数据可能不是对应日期的后台返回数据,所以定义一个 n,初始化为 0,当日期不等时,n++。对比日期时取(i - n)。代码如下:

// 后台返回数据 ,其中缺少5/30、5/31、6/3、6/4 数据,需要为这几个日期的count补0.

const _res = [ 

          { date: '2022-05-29',  count: 123 },

          { date: '2022-06-01', count: 222 },

          { date: '2022-06-02', count: 444 },

          { date: '2022-06-05', count: 666 }

        ]

function GetNumberOfDays(date1, date2) { // 获得天数

  // date1:开始日期,date2结束日期

  var a1 = Date.parse(new Date(date1))

  var a2 = Date.parse(new Date(date2))

  var day = parseInt((a2 - a1) / (1000 * 60 * 60 * 24)) //时间戳相减,然后除以天数

  return day

}

function getDateList(length, time_stamp, step) {  // 获取日期列表,

  var lengthParam = length || '3'

  var timeStamp = time_stamp || Date.parse(new Date())

  var date_list = []

  var stepParam = step || '1' // 跨度

  for (var i = 0; i < lengthParam; i++) {

    var y = new Date(timeStamp + i * 86400000 * stepParam).getFullYear()

    var m = (new Date(timeStamp + i * 86400000 * stepParam).getMonth() + 1).toString().padStart(2, '0')

    var d = (new Date(timeStamp + i * 86400000 * stepParam).getDate()).toString().padStart(2, '0')

    date_list.push(y + '-' + m + '-' + d)

  }

  return date_list

}

    var n = 0

    var yAxis = []

    var a1 = _res[0].date

    var a2 = _res[_res.length - 1].date

    var len = GetNumberOfDays(a1, a2) + 1

    var xAxis = getDateList(len, Date.parse(new Date(a1)))

    for (var i = 0; i < xAxis.length; i++) {

        if (xAxis[i] === _res[i]?.date) { // 日期相等,取count值

          yAxis.push(_res[i].count)

        } else if (xAxis[i] === _res[i - n]?.date) { //  日期相等,取count值

          yAxis.push(_res[i - n].count)

        } else { // 没有对应日期,补零

          yAxis.push(0) 

          n += 1

        }

      }

    console.log(xAxis,yAxis) // 补全后的 x轴 和y轴数据

相关文章

网友评论

      本文标题:echart图,数据补零逻辑

      本文链接:https://www.haomeiwen.com/subject/afjpwrtx.html