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 相关文章推荐
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
Mar 26 Javascript
Javascript 键盘keyCode键码值表
Dec 24 Javascript
jQuery对象和DOM对象使用说明
Jun 25 Javascript
jQuery.Validate验证库的使用介绍
Apr 26 Javascript
使用CSS3的scale实现网页整体缩放
Mar 18 Javascript
JS获取网页属性包括宽、高等等
Apr 03 Javascript
Js 获取当前函数参数对象的实现代码
Jun 20 Javascript
基于zepto.js简单实现上传图片
Jun 21 Javascript
ajax实现动态下拉框示例
Jan 10 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
Jan 10 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
Jun 15 Javascript
Vue2.X 通过AJAX动态更新数据
Jul 17 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
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
编译php 5.2.14+fpm+memcached(具体操作详解)
2013/06/18 PHP
PHP实现抓取HTTPS内容
2014/12/01 PHP
php监测数据是否成功插入到Mysql数据库的方法
2016/11/25 PHP
js window.onload 加载多个函数的方法
2009/11/02 Javascript
js/jquery去掉空格,回车,换行示例代码
2013/11/05 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
AngularJS基础知识笔记之表格
2015/05/10 Javascript
NodeJs的优势和适合开发的程序
2016/08/14 NodeJs
扩展Bootstrap Tooltip插件使其可交互的方法
2016/11/07 Javascript
jQuery时间日期三级联动(推荐)
2016/11/27 Javascript
Angular的$http与$location
2016/12/26 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
详解Webpack实战之构建 Electron 应用
2017/12/25 Javascript
微信小程序自定义组件实现tabs选项卡功能
2018/07/14 Javascript
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
javascript中函数的写法实例代码详解
2018/10/28 Javascript
详解nodejs http请求相关总结
2019/03/31 NodeJs
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
2020/05/06 Javascript
如何使用 vue-cli 创建模板项目
2020/11/19 Vue.js
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
Python实现调度算法代码详解
2017/12/01 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
Python3enumrate和range对比及示例详解
2019/07/13 Python
python多线程共享变量的使用和效率方法
2019/07/16 Python
python+selenium 鼠标事件操作方法
2019/08/24 Python
新西兰演唱会和体育门票网站:Ticketmaster新西兰
2017/10/07 全球购物
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
比利时香水网上商店:NOTINO
2018/03/28 全球购物
美国室内盆栽植物购买网站:Plants.com
2020/04/24 全球购物
计算机网络专业推荐信
2013/11/24 职场文书
创业计划书撰写原则
2014/01/25 职场文书
2014小学一年级班主任工作总结
2014/12/05 职场文书
Mysql中有关Datetime和Timestamp的使用总结
2021/12/06 MySQL