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 相关文章推荐
JSChart轻量级图形报表工具(内置函数中文参考)
Oct 11 Javascript
围观tangram js库
Dec 28 Javascript
jquery插件制作简单示例说明
Feb 03 Javascript
jQuery固定元素插件scrolltofixed使用指南
Apr 21 Javascript
JQuery工具函数汇总
Jun 15 Javascript
javascript发送短信验证码实现代码
Nov 12 Javascript
JavaScript获取对象在页面中位置坐标的方法
Feb 03 Javascript
前端js实现文件的断点续传 后端PHP文件接收
Oct 14 Javascript
angular.js4使用 RxJS 处理多个 Http 请求
Sep 23 Javascript
vue跳转方式(打开新页面)及传参操作示例
Jan 26 Javascript
详解Vue之事件处理
Jul 10 Javascript
详解vue3.0 的 Composition API 的一种使用方法
Oct 26 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中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
2015/03/18 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
jquery dialog键盘事件代码
2010/08/01 Javascript
推荐20家国外的脚本下载网站
2011/04/28 Javascript
js中用window.open()打开多个窗口的name问题
2014/03/13 Javascript
node.js中的fs.rmdirSync方法使用说明
2014/12/16 Javascript
jQuery源码解读之removeAttr()方法分析
2015/02/20 Javascript
JavaScript中的Math.LN2属性用法详解
2015/06/12 Javascript
Bootstrap按钮组件详解
2016/04/26 Javascript
JavaScript中各种引用类型的常用操作方法小结
2016/05/05 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
在bootstrap中实现轮播图实例代码
2017/06/11 Javascript
Vue.js实现一个todo-list的上移下移删除功能
2017/06/26 Javascript
js实现图片粘贴上传到服务器并展示的实例
2017/11/08 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
详解Vue 如何监听Array的变化
2019/06/06 Javascript
vue实现评价星星功能
2020/06/30 Javascript
使用url_helper简化Python中Django框架的url配置教程
2015/05/30 Python
如何处理Python3.4 使用pymssql 乱码问题
2016/01/08 Python
Python构造自定义方法来美化字典结构输出的示例
2016/06/16 Python
浅谈function(函数)中的动态参数
2017/04/30 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
Python selenium页面加载慢超时的解决方案
2020/03/18 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
深入理解Python 多线程
2020/06/16 Python
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
2014/04/10 HTML / CSS
Optimalprint加拿大:在线打印服务
2020/04/03 全球购物
个人租房协议书范本
2014/09/30 职场文书
2014年检验员工作总结
2014/11/19 职场文书
课外活动总结
2015/02/04 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书