vue对echart图表数据按每分钟进行处理,没有数据则补0

对每分钟的数据进行处理,没有数据则补0

一、循环嵌套寻址,存储相同时间戳下的数据,其余为0

  1. 存储后端返回的数据
let resource = {
    timeStamp:[],
    usedCpuSys: [],
    usedCpuUser: [],
	},
	nowTimeStamp = res.timeStamp,
	arrayTimeStamp = this.$funs.storeTimeStamp(nowTimeStamp,this.queryParam.dateFrom,this.queryParam.dateTo);
if(res.data){
    res.data.forEach((item) => {
        resource.timeStamp.push(item.createTimestamp)
        resource.usedCpuSys.push(item.usedCpuSys)
        resource.usedCpuUser.push(item.usedCpuUser)
    })
}else {
    for (let i = 0; i < arrayTimeStamp.length;i++) {
        resource.timeStamp.push(arrayTimeStamp[i])
        resource.usedCpuSys.push(0)
        resource.usedCpuUser.push(0)
    }
}
//时间戳存储
storeTimeStamp(nowTimeStamp,timeFrom,timeTo){
	//nowTimeStamp数据返回时间的时间戳,timeFrom图表数据需要的起始时间,timeTo图表数据需要的终点时间
    let arrayTimeStamp = [];
    let nowTime = parseInt(nowTimeStamp / 1000),
        fromTime = parseInt(Date.parse(timeFrom) / 1000),
        toTime = parseInt(Date.parse(timeTo) / 1000);
    if(toTime < nowTime){
        for (let i = fromTime; i < toTime; i = i + 60) {
            arrayTimeStamp.push(i*1000)
        }
    }else {
        for (let i = fromTime; i < nowTime-60; i = i + 60) {
            arrayTimeStamp.push(i*1000)
        }
    }
    return arrayTimeStamp
},

2.目标时间段与后端返回的带数据时间段进行循环对比

for (let i = 0; i < this.arrayTimeStamp.length;i++){
	resource.timeStamp.push(this.$funs.renderTimeBefore(this.arrayTimeStamp[i]*1000))
	resource.usedCpuSys.push(0)
	resource.usedCpuUser.push(0)
	source.forEach((item) => {
	    let resTime = this.$funs.renderTimeBefore(item.createTimestamp)
	    if(this.$funs.renderTimeBefore(this.arrayTimeStamp[i]*1000) === resTime){
	        resource.usedCpuSys[i] = (item.usedCpuSys)
	        resource.usedCpuUser[i] = (item.usedCpuUser)
	    }
	})
}

二、单次循环对比,将目标时间段看成数轴,后端返回的数据存入数轴上相应位置,效率较上一种快了十倍,该方法局限性更大一些,要求返回的数据时间戳的时间间隔至少有60s,每一个60s以内的数据最多两条
1.已封装成相应的函数

//图表数据按分钟补0
insertData(arrayTimeStamp,resData,resTimeStamp){
    //arrayTimeStamp总的数据段 resData返回时间段的数据值 resTimeStamp返回的时间段
    //数据格式都为数组[]
    let j=0,
        resource= {
        timeStamp:[],
        data: []
    };
    for (let i = 0; i < arrayTimeStamp.length;i++) {
        //时间戳都转为毫秒级
        if(resData[j] && this.renderTimeBefore(arrayTimeStamp[i]) === this.renderTimeBefore(resTimeStamp[j])){
            resource.timeStamp[i] = this.renderTimeBefore(arrayTimeStamp[i])
            resource.data[i] = resData[j]
            //过滤相同一分钟内的数据
            if(this.renderTimeBefore(resTimeStamp[j]) === this.renderTimeBefore(resTimeStamp[j+1])){
                j=j+2
            }else {
                j++
            }
        }else {
            resource.timeStamp[i] = this.renderTimeBefore(arrayTimeStamp[i])
            resource.data[i] = 0
        }
    }
    return resource
}

2.调用

//例如
usedCpuSys= this.$funs.insertData(myTimeStamp,res.data.usedCpuSys,res.data.timeStamp)

三、绘制图表
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中使用Echarts进行前后端数据交互,可以通过以下步骤实现: 1.在Vue项目中安装Echarts ```shell npm install echarts --save ``` 2.在Vue组件中引入Echarts ```javascript import echarts from 'echarts' ``` 3.在Vue组件中创建一个Echarts实例 ```javascript mounted() { // 基于准备好的dom,初始化echarts实例 let myChart = echarts.init(document.getElementById('myChart')) // 指定图表的配置项和数据 let option = { title: { text: 'ECharts 入门示例' }, tooltip: {}, legend: { data:['销量'] }, xAxis: { data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"] }, yAxis: {}, series: [{ name: '销量', type: 'bar', data: [5, 20, 36, 10, 10, 20] }] } // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option) } ``` 4.在Vue组件中使用axios获取后端数据 ```javascript import axios from 'axios' export default { data() { return { chartData: [] } }, mounted() { axios.get('/api/chartData') .then(res => { this.chartData = res.data this.renderChart() }) .catch(err => { console.log(err) }) }, methods: { renderChart() { let myChart = echarts.init(document.getElementById('myChart')) let option = { title: { text: 'ECharts 入门示例' }, tooltip: {}, legend: { data:['销量'] }, xAxis: { data: this.chartData.categories }, yAxis: {}, series: [{ name: '销量', type: 'bar', data: this.chartData.data }] } myChart.setOption(option) } } } ``` 5.在后端使用koa2编写接口,返回数据给前端 ```javascript const Koa = require('koa') const Router = require('koa-router') const app = new Koa() const router = new Router() router.get('/api/chartData', async (ctx, next) => { const chartData = { categories: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子'], data: [5, 20, 36, 10, 10, 20] } ctx.body = chartData }) app.use(router.routes()).use(router.allowedMethods()) app.listen(3000, () => { console.log('server is running at http://localhost:3000') }) ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值