vue数组对象排序的实现代码


Posted in Javascript onJune 20, 2018

前言

最近在看vue的教学视频,正好学到的数组对象排序方法,在这跟大家分享一下,如有不足之处,请赐教。

vue数组对象排序的实现代码

普通数组的排序

先看代码:

<div class="app">
   <h1>v-for实例</h1>
   <hr>
   <ol>
     <li v-for="number in numbers">{{number}}</li>
   </ol>
 </div> 
 <script>
 new Vue({
   el:'.app',
   data:{
     numbers:[5 ,88, 43, 56, 28, 61, 9],
   },
   computed:{
     numbers:function(){
       return this.numbers.sort(numbers);
     },
   }
 })

原本我以为会出来结果,可结果不一样。。

vue数组对象排序的实现代码

后来我想了一下,发现了其中的问题,sort方法会调用每个数组项的toString()方法,得到字符串,然后再对得到的字符串进行排序。sort()方法的参数就起到了作用,我们把这个参数叫做比较函数。

解决办法

加一个比较函数

function sortNumbers(a,b){
    return a-b;
  }

咦,怎么结果还是没出来??原来我是输出的时候忘记吧numbers换成sortNumbers。这是从小到大输出,那么从大到小呢?很简单就是return b-a,

结果如图所示:

vue数组对象排序的实现代码

完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>v-for</title>
  <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>
<body>
 <div class="app">
   <h1>v-for实例</h1>
   <hr>
   <ol>
     <li v-for="number in sortNumbers">{{number}}</li>
   </ol>

 </div> 
 <script>
 new Vue({
   el:'.app',
   data:{
     numbers:[5 ,88, 43, 56, 28, 61, 9],

   },
   computed:{
    sortNumbers:function(){
       return this.numbers.sort( sortNumbers);
     },

   }
 });
  function sortNumbers(a,b){
      return a-b;
    }

</script>
</body>
</html>

数组对象的排序

如果数组项是对象,我们需要根据数组项的某个属性对数组进行排序,要怎么办呢?其实和前面的比较函数也差不多。所以我就只把部分代码分享出来了。

如何对这个数组进行age排序呢

students:[
        {name:'cjk',age:'38'} ,
        { name:'xxf',age:'29'},
        {name:'zk',age:'26'},
     ]

比较函数:

function sortByKey(array,key){
  return array.sort(function(a,b){
    var x = a[key];
    var y = b[key];
    return((x<y)?-1:((x>y)?1:0));
  })
}

这里我是用三元函数来判断的,也和下面这个代码效果一样

var compare = function (prop) {
  return function (obj1, obj2) {
    var val1 = obj1[prop];
    var val2 = obj2[prop];if (val1 < val2) {
      return -1;
    } else if (val1 > val2) {
      return 1;
    } else {
      return 0;
    }      
  } 
}

我觉得这个代码有点冗杂,所以我就用了三元运算符来判断输出。

结果:

vue数组对象排序的实现代码

整个项目文件:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>v-for</title>
  <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>
<body>
 <div class="app">
   <h1>v-for实例</h1>
   <hr>
   <ol>
     <li v-for="number in sortNumbers">{{number}}</li>
   </ol>
   <hr>
   <ul>
    <li v-for="(student,index) in sortstudents">{{index+1}}:{{student.name}}-{{student.age}}</li>
   </ul>
 </div> 
 <script>
 new Vue({
   el:'.app',
   data:{
     numbers:[5 ,88, 43, 56, 28, 61, 9],
     students:[
        {name:'cjk',age:'38'} ,
        { name:'xxf',age:'29'},
        {name:'zk',age:'26'},
     ]
   },
   computed:{
    sortNumbers:function(){
       return this.numbers.sort( sortNumbers);
     },
     sortstudents:function(){
       return sortByKey(this.students,'age')
     }
   }
 });
function sortNumbers(a,b){
    return a-b;
  }
  //数组对象排序
function sortByKey(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>
</body>
</html>

结果:

vue数组对象排序的实现代码

希望这篇文章对新手有用,也希望你们能和我一起分享知识,一起成长。也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
关于文本限制字数的js代码
Apr 02 Javascript
javascript CSS画图之基础篇
Jul 29 Javascript
重载toString实现JS HashMap分析
Mar 13 Javascript
JavaScript把数组作为堆栈使用的方法
Mar 20 Javascript
分享十五款 jQuery 社交网络分享插件
May 16 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
Oct 25 Javascript
JS填写银行卡号每隔4位数字加一个空格
Dec 19 Javascript
Bootstrap学习笔记 轮播(Carousel)插件
Mar 21 Javascript
js中this对象用法分析
Jan 05 Javascript
JS实现将二维数组转为json格式字符串操作示例
Jul 12 Javascript
vue配置文件实现代理v2版本的方法
Jun 21 Javascript
vue prop属性传值与传引用示例
Nov 13 Javascript
vue项目实现github在线预览功能
Jun 20 #Javascript
node thread.sleep实现示例
Jun 20 #Javascript
解决循环中setTimeout执行顺序的问题
Jun 20 #Javascript
Vue.use源码学习小结
Jun 20 #Javascript
Vuex入门到上手教程
Jun 20 #Javascript
JavaScript 中的 this 工作原理
Jun 20 #Javascript
如何用webpack4带你实现一个vue的打包的项目
Jun 20 #Javascript
You might like
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
PHP中session跨子域的三种实现方法
2016/07/25 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
2017/06/07 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
2019/01/23 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
文字不间断滚动(上下左右)实例代码
2013/04/21 Javascript
javascript firefox 自动加载iframe 自动调整高宽示例
2013/08/27 Javascript
解决jquery插件冲突的问题
2014/01/23 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
2014/04/03 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
快速解决brew安装特定版本flow的问题
2018/05/17 Javascript
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
2018/06/05 jQuery
Vue axios设置访问基础路径方法
2018/09/19 Javascript
Vue 中可以定义组件模版的几种方式
2019/08/06 Javascript
微信小程序实现点击导航条切换页面
2020/11/19 Javascript
[01:09:19]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第二场 2月28日
2021/03/11 DOTA
python中Matplotlib实现绘制3D图的示例代码
2017/09/04 Python
Python学习之Django的管理界面代码示例
2018/02/10 Python
Python 中 -m 的典型用法、原理解析与发展演变
2019/11/11 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
动态设置django的model field的默认值操作步骤
2020/03/30 Python
html5 css3网站菜单实现代码
2013/12/23 HTML / CSS
Forever 21美国官网:美国标志性快时尚品牌
2017/02/20 全球购物
体育教师自荐信范文
2013/12/16 职场文书
八年级英语教学反思
2014/01/09 职场文书
高一地理教学反思
2014/01/18 职场文书
让世界充满爱演讲稿
2014/05/24 职场文书
爱与责任师德演讲稿
2014/08/26 职场文书
违纪学生保证书
2015/02/27 职场文书
信息技术课教学反思
2016/02/23 职场文书
基于Redis位图实现用户签到功能
2021/05/08 Redis
windows系统搭建WEB服务器详细教程
2022/08/05 Servers