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 相关文章推荐
javascript笔试题目附答案@20081025_jb51.net
Oct 26 Javascript
jquery中常用的SET和GET$(”#msg”).html循环介绍
Oct 09 Javascript
JavaScript中“过于”犀利地for/in循环使用示例
Oct 22 Javascript
javascript操作ul中li的方法
May 14 Javascript
JS创建事件的三种方法(实例代码)
May 12 Javascript
JS给按钮添加跳转功能类似a标签
May 30 Javascript
Node.js 回调函数实例详解
Jul 06 Javascript
对于js垃圾回收机制的理解
Sep 14 Javascript
小试SVG之新手小白入门教程
Jan 08 Javascript
15分钟学会vue项目改造成SSR(小白教程)
Dec 17 Javascript
一文读懂vue动态属性数据绑定(v-bind指令)
Jul 20 Javascript
vue-quill-editor的使用及个性化定制操作
Aug 04 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
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
php快递单号查询接口使用示例
2014/05/05 PHP
深入浅出php socket编程
2015/05/13 PHP
php检测文本的编码
2015/07/26 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
Prototype使用指南之hash.js
2007/01/10 Javascript
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
jQuery检测输入的字符串包含的中英文的数量
2015/04/17 Javascript
jQuery使用模式窗口实现在主页面和子页面中互相传值的方法
2016/03/01 Javascript
JSP防止网页刷新重复提交数据的几种方法
2016/11/19 Javascript
javascript实现二叉树遍历的代码
2017/06/08 Javascript
利用vue+elementUI实现部分引入组件的方法详解
2017/11/22 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
jQuery实现查看图片功能
2020/12/01 jQuery
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
python添加模块搜索路径方法
2017/09/11 Python
python数据封装json格式数据
2018/03/04 Python
详解Python中如何写控制台进度条的整理
2018/03/07 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
Django 路由系统URLconf的使用
2018/10/11 Python
通过实例了解Python str()和repr()的区别
2020/01/17 Python
PyInstaller运行原理及常用操作详解
2020/06/13 Python
python模块如何查看
2020/06/16 Python
Python调用REST API接口的几种方式汇总
2020/10/19 Python
基于HTML5 Canvas 实现商场监控实例详解
2017/11/20 HTML / CSS
德国足球商店:OUTFITTER
2019/05/06 全球购物
美国沃尔玛网上超市:Walmart
2020/08/14 全球购物
MIS软件工程师的面试题
2016/04/22 面试题
教师推荐信范文
2013/11/24 职场文书
学习张丽丽心得体会
2014/09/03 职场文书
优秀团员自我评价
2015/03/10 职场文书
iPhone13 Pro外观确定,升级4800万镜头,4月20日发新品
2021/04/15 数码科技
详解Javascript实践中的命令模式
2021/05/05 Javascript
python控制台打印log输出重复的解决方法
2021/05/14 Python
基于Python实现股票收益率分析
2022/04/02 Python