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 相关文章推荐
jQuery 判断页面元素是否存在的代码
Aug 14 Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
Jan 12 Javascript
使用jQuery处理AJAX请求的基础学习教程
May 10 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
Jan 23 Javascript
JS库之wow.js使用方法
Sep 14 Javascript
JS遍历DOM文档树的方法实例详解
Apr 03 Javascript
详解Require.js与Sea.js的区别
Aug 05 Javascript
解决vue接口数据赋值给data没有反应的问题
Aug 27 Javascript
详解vue更改头像功能实现
Apr 28 Javascript
解决layui checkbox 提交多个值的问题
Sep 02 Javascript
微信小程序实现多行文字超出部分省略号显示功能
Oct 23 Javascript
vue axios请求成功却进入catch的原因分析
Sep 08 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
PHP编译安装时常见错误解决办法
2015/05/28 PHP
CodeIgniter连贯操作的底层原理分析
2016/05/17 PHP
PHP连接MySQL进行增、删、改、查操作
2017/02/19 PHP
javascript offsetX与layerX区别
2010/03/12 Javascript
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
2010/10/01 Javascript
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
js中有关IE版本检测
2012/01/04 Javascript
javascript SpiderMonkey中的函数序列化如何进行
2012/12/05 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
Javascript前端UI框架Kit使用指南之kitjs事件管理
2014/11/28 Javascript
Javascript实现鼠标右键特色菜单
2015/08/04 Javascript
javascript跨域总结之window.name实现的跨域数据传输
2015/11/01 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
2016/02/20 Javascript
JS原型、原型链深入理解
2016/02/27 Javascript
Active控件问题小结(附解决办法)
2016/06/09 Javascript
AngularJS基础 ng-selected 指令简单示例
2016/08/03 Javascript
详细分析Javascript中创建对象的四种方式
2016/08/17 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
浅谈vue 单文件探索
2018/09/05 Javascript
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
通过实例解析json与jsonp原理及使用方法
2020/09/27 Javascript
Python迭代器和生成器介绍
2015/03/06 Python
python实现对一个完整url进行分割的方法
2015/04/29 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
2018/03/13 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
Python使用pdb调试代码的技巧
2020/05/03 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
为智能设备设计个性化保护套网站:caseable
2017/01/05 全球购物
德国化妆品和天然化妆品网上商店:kosmetikfuchs.de
2017/06/09 全球购物
技术总监的工作职责
2013/11/13 职场文书
效能监察建议书
2014/05/19 职场文书
物业总经理助理岗位职责
2014/06/29 职场文书
党校个人总结
2015/03/04 职场文书
烈士陵园观后感
2015/06/08 职场文书
golang 接口嵌套实现复用的操作
2021/04/29 Golang