vue 根据数组中某一项的值进行排序的方法


Posted in Javascript onAugust 30, 2018

vue中数组和对象的排序

1数组排序

<div id="app">
  <ul>
   <li v-for="a in arr1">{{a}}</li>
  </ul>
 </div>
  <script type="text/javascript">
   new Vue({
    el:"#app",
    data:{
     arr:[1,4,5,2,3,44]
    },computed:{
     arr1:function(){
      return this.arr.sort(sortNum)//调用排序方法
     }
    }
   })
   function sortNum(a,b){//排序方法
    return a-b;
   }
  </script>

2对象排序

<div id="app">
   <ul>
    <li v-for="(stu,index) in students1">{{stu}}</li>
   </ul>
  </div>
  <script type="text/javascript">
   new Vue({
    el:"#app",
    data:{
     students:[
      {name:"小a",age:20},
      {name:"小b",age:21},
      {name:"小c",age:18},
      {name:"小d",age:19},
      {name:"小f",age:18}
     ]
    },
    computed:{
     students1:function(){
      return sortKey(this.students,'age')
     }
    }
   })
   function sortKey(array,key){
    return array.sort(function(a,b){
     var x = a[key];
     var y = b[key];
     return ((x<y)?-1:(x>y)?1:0)
    })
   }
  </script>

一、前言

我在vue项目中遇到了一个表格排序的需求,根据某一项的值的大小从大到小调整数组顺序。

二、代码

vue 根据数组中某一项的值进行排序的方法

表格大概是这个样子,样式和图片在代码中简化了。

<table class="recommend_table" cellspacing="0">
 <tr>
  <th>股票</th>
  <th @click="sort('in_price')">入选价</th>
  <th @click="sort('now_price')">最新价</th>
  <th @click="sort('increase')">模拟涨跌幅</th>
 </tr>
 <tr v-for="(item,index) in recommendlist" :key="index">
  <td>
   <div class="recommend_name">{{item.name}}</div>
   <div class="recommend_num">{{item.bn}}</div>
  </td>
  <td>{{item.in_price}}</td>
  <td>{{item.now_price}}</td>
  <td>{{item.increase}}%</td>
 </tr>
</table>

<script type="text/ecmascript-6">
 export default {
  data(){
   return{
    recommendlist: [
     { name:'高科石化', bn:'002778', in_price: 20.68, now_price: 28.68, increase: 10.01 },
     { name:'中孚信息', bn:'300659', in_price: 19.46, now_price: 17.46, increase: 9.06 },
     { name:'永福股份', bn:'300712', in_price: 17.68, now_price: 32.68, increase: 2.01 }
    ],
    sortType: 'in_price'
   }
  },
  methods: {
   sort(type) {
    this.sortType = type;
    this.recommendlist.sort(this.compare(type));
    // switch(type){
     // case 'in_price':
     //  this.sortType = 'in_price';
     //  this.recommendlist.sort(this.compare('in_price'));
     //  break;
     // case 'now_price':
     //  this.sortType = 'now_price';
     //  this.recommendlist.sort(this.compare('now_price'));
     //  break;
     // case 'increase':
     //  this.sortType = 'increase';
     //  this.recommendlist.sort(this.compare('increase'));
     //  break;
    // }
   },
   compare(attr) {
    return function(a,b){
     var val1 = a[attr];
     var val2 = b[attr];
     return val2 - val1;
    }
   }
  }
 }
</script>

1. 排序方法

这里用到的是数组的sort方法,这个方法有一个需要注意的地方,就是不传参数的话,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。这并不是我们想要的排序方法,所以必须要传参。

sort方法的参数是一个函数,这个函数提供了一个比较方法,要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。

  1. 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  2. 若 a 等于 b,则返回 0。
  3. 若 a 大于 b,则返回一个大于 0 的值。
compare(key) {
 return function(a,b){
  var val1 = a[key];
  var val2 = b[key];
  return val2 - val1;
 }
}

在代码中,compare函数中的匿名函数就是这样一个函数,但这个函数外面又嵌套了一层,这是因为需要根据数组中的某一项来排序,所以需要把这一项的key值传进来。

2. 调用排序方法

sort(type) {
 this.sortType = type;
 this.recommendlist.sort(this.compare(type));
 // switch(type){
  // case 'in_price':
  //  this.sortType = 'in_price';
  //  this.recommendlist.sort(this.compare('in_price'));
  //  break;
  // case 'now_price':
  //  this.sortType = 'now_price';
  //  this.recommendlist.sort(this.compare('now_price'));
  //  break;
  // case 'increase':
  //  this.sortType = 'increase';
  //  this.recommendlist.sort(this.compare('increase'));
  //  break;
 // }
}

一开始我按照注释的部分写的,和我一样抽象能力不是特别好的人首先会想到要这样写,但是写出来之后发现三种情况不过是重复的代码,这时我就直接用最上面两行代码来代替,写完以后感觉内心一片平和。这种复用率高的代码简直让人太舒服了。

三、结语

虽然是一个简单的功能,但是非常值得归纳总结一下。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
网络图片延迟加载实现代码 超越jquery控件
Mar 27 Javascript
javascript URL编码和解码使用说明
Apr 12 Javascript
Javascript Object.extend
May 18 Javascript
基于JQuery制作的产品广告效果
Dec 08 Javascript
Jquery 切换不同图片示例代码
Dec 05 Javascript
探寻Javascript执行效率问题
Nov 12 Javascript
详解JS函数重载
Dec 04 Javascript
javascript笛卡尔积算法实现方法
Apr 08 Javascript
XML文件转化成NSData对象的方法
Aug 12 Javascript
Json解析的方法小结
Jun 22 Javascript
vue router 配置路由的方法
Jul 26 Javascript
React项目动态设置title标题的方法示例
Sep 26 Javascript
对vue中methods互相调用的方法详解
Aug 30 #Javascript
原生JS+HTML5实现的可调节写字板功能示例
Aug 30 #Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
Aug 30 #Javascript
解决jQuery使用append添加的元素事件无效的问题
Aug 30 #jQuery
jsonp跨域及实现百度首页联想功能的方法
Aug 30 #Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
Aug 30 #Javascript
解决vue的变量在settimeout内部效果失效的问题
Aug 30 #Javascript
You might like
法国:浪漫之都的咖啡文化
2021/03/03 咖啡文化
php 获取客户端的真实ip
2009/11/30 PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
2011/11/02 PHP
php简单生成随机数的方法
2015/07/30 PHP
给WordPress中的留言加上楼层号的PHP代码实例
2015/12/14 PHP
ThinkPHP防止重复提交表单的方法实例分析
2018/05/10 PHP
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
基于jQuery的动态表格插件
2011/03/28 Javascript
使用jQuery实现验证上传图片的格式与大小
2014/12/03 Javascript
jQuery使用之设置元素样式用法实例
2015/01/19 Javascript
JS组件Bootstrap Table使用方法详解
2016/02/02 Javascript
EasyUI布局 高度自适应
2016/06/04 Javascript
使用base64对图片的二进制进行编码并用ajax进行显示
2017/01/03 Javascript
Javascript 详解封装from表单数据为json串进行ajax提交
2017/03/29 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
2017/10/13 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
详解JavaScript 中 if / if...else...替换方式
2018/07/15 Javascript
用npm安装vue和vue-cli,并使用webpack创建项目的方法
2018/09/28 Javascript
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
Python中装饰器高级用法详解
2017/12/25 Python
python实现音乐下载的统计
2018/06/20 Python
python 找出list中最大或者最小几个数的索引方法
2018/10/30 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
matlab中imadjust函数的作用及应用举例
2020/02/27 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
如何用python写个模板引擎
2021/01/14 Python
Big Green Smile德国网上商店:提供各种天然产品
2018/05/23 全球购物
Bluebella德国官网:英国性感内衣和睡衣品牌
2019/11/08 全球购物
信息与计算机科学职业规划范文:成为一艘有方向的船
2014/09/11 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
2015年小学重阳节活动总结
2015/07/29 职场文书
辞职申请书范本
2019/05/20 职场文书
Python进程池与进程锁之语法学习
2022/04/11 Python
nginx配置指令之server_name的具体使用
2022/08/14 Servers