疫情数据分析平台(七):数据排行榜

网站中有这么一个功能,根据现存确诊的情况进行数据排行,并显示在页面中。由于我在本次项目前端开发主要采用eltab来承载ui,所以数据排行被设计在一个表格中,然后显示在一个eltab中。数据则是从后端获取,不过后端传过来的数据是杂乱的,即未排序的,因此需要我在前端用JavaScript进行数据排序。首先获取数据,用axios方法:

var _this=this
      this.$axios.get('/user/world_data_dead').then(resp=>{
        if(resp&&resp.status===200){
          _this.worldData=resp.data
        }

请求到数据后传入vue的声明数组中,然后利用axios请求返回的是一个promise对象,可以使用then实现同步函数,在then函数中设计匿名函数处理数据:

.then(()=>{
        for (var i=0;i<this.worldData.length;i++){
          var obj={
            name:this.worldData[i].name,
            confirmCount:this.worldData[i].value,
            death:this.worldData[i].dead
          }
          this.worldRankdata.push(obj)

        }

将数据构造成我们需要的格式,然后调用排序函数进行排序:

升序排序:

sortByConfirmascending(ary,key){
      return ary.sort(function(a,b){
        let x=a[key]
        let y=b[key]
        return ((x<y)?-1:(x>y)?1:0)
      })
    },

降序:

sortByConfirmDescending2(ary,key){
      return ary.sort(function(a,b){
        let x=a[key]
        let y=b[key]
        return y-x
      })
    },

注意到排序算法的特殊写法,返回值若是负数,则小于,正数则是大于,以此为基准两两比较,再运用到整个数组中。实际上,该函数能够运用于所以数据格式,包括string字符串类型。

对于中国地区的排序是一样的,贴出代码:

loadChinaRankData(){
      var _this=this
      this.$axios.get("/user/china_data_dead").then(resp=>{
        if(resp&&resp.status===200){
          _this.chinaData=resp.data
        }
      }).then(()=>{
        for (var i=0;i<this.chinaData.length;i++){
          var obj={
            name:this.chinaData[i].name,
            confirmCount:this.chinaData[i].value,
            death:this.chinaData[i].dead
          }

          this.chinaRankdata.push(obj)
          this.sortByConfirmDescending2(this.chinaRankdata,"confirmCount")
        }

      })
    },
mounted() {
    this.loadWorldRankData()
    this.loadChinaRankData()
  },
<el-tabs type="border-card" class="tab-box">
    <el-tab-pane>
      <span slot="label"><i class="el-icon-date"></i> 中国疫情</span>
      <el-table
        :data="chinaRankdata"
        height="280"
        stripe
        style="width: 100%">
        <el-table-column
          prop="name"
          label="地区"
          width="100">
        </el-table-column>
        <el-table-column
          prop="confirmCount"
          label="现存确诊">
        </el-table-column>
        <el-table-column
          prop="death"
          label="死亡">
        </el-table-column>
      </el-table>
    </el-tab-pane>
    <el-tab-pane>
      <span slot="label"><i class="el-icon-date"></i> 世界疫情</span>
      <el-table
        :data="worldRankdata"
        height="280"
        stripe
        style="width: 100%">
        <el-table-column
          prop="name"
          label="国家"
          width="100">
        </el-table-column>
        <el-table-column
          prop="confirmCount"
          label="累计确诊">
        </el-table-column>
        <el-table-column
          prop="death"
          label="死亡">
        </el-table-column>
      </el-table>
    </el-tab-pane>
  </el-tabs>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值