vue 对象数组的数据正序、倒叙排序对应图表前十、后十展示

49 篇文章 1 订阅
1 篇文章 0 订阅

一、需求:使用echart图表点击按钮动态展示前十和后十数据,默认展示前十。如下图所示:

 后端传过来的数据是这样的:

二、实现:

  • 前十后十按钮:
    <el-radio-group v-model="sortType">
        <el-radio-button label="TOP10">TOP10</el-radio-button>
        <el-radio-button label="BOTTOM10">BOTTOM10</el-radio-button>
    <el-radio-group>

  • 图表接口调用,结果参数赋值给一个全局参数;

mounted() {
	this.getChartData();
	window.addEventListener("resize", this.resize); //监听视图大小变化
	setTimeout(this.resize,300);
},

methods:{
//获取图表数据
 getChartData() {
      let params = {};
        //接口调用
      getChartList(params).then((res) => {
        if (res.code == 200) {
          this.chartData = res.data;  //将返回参数赋值给全局变量this.chartData
          this.initChart(res.data);
        }
      });
    },
}
  •  调用公共方法将参数重新组装成我们需要的数据;循环数据将x轴与y轴数据提取成两个一一对应的数组;

  

//初始化图表数据
initChart(data) {
   let func = this.sortType === "TOP10" ? this.descCompare : this.compare; //升序还是降序
   data = this.getSortChartData(data, func, 10); //接口数据重新组装
   let lineChart = echarts.init(document.getElementById("chart"));
   let option = {
      //do something
   }
    ...
},

//升序
compare(a, b) {
  return a.value - b.value;
},

//降序
descCompare(a, b) {
  return b.value - a.value;
},

//数据重构
getSortChartData(data, func, limit) {
  let _axisList = [];
  let _series = [];
  if (data) {
    let obj = {};
    data.forEach((item) => {
      let key = item.indexName; 
      obj[key] = obj[key] ? obj[key] + item.dataValue : item.dataValue;
    });
    //将对应的数据obj对象循环转换成 key和value分开成两个一一对应的数组
    _axisList = Object.keys(obj).map((key) => {
        return { key, value: obj[key] };
    }).sort(func).map((i) => i.key).splice(0, limit);  //y轴文字
    _series = axisList.map(key => parseFloat(obj[key]).toFixed(2)).splice(0, limit); //x轴数据
  }
  return { _axisList, _series };
},
  • 通过监听来触发点击正序和倒序的按钮还要触发方法重新排序数据;
watch:{
    //监听排序,将接口数据重新传入
	sortType(){
		this.initChart(this.chartData);
	}
},

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值