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 相关文章推荐
QQ邮箱的一个文本编辑器代码
Mar 14 Javascript
document.execCommand()的用法小结
Jan 08 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
Apr 25 Javascript
js 获取元素在页面上的偏移量的方法汇总
Apr 13 Javascript
详解javascript高级定时器
Dec 31 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
Jul 22 Javascript
AngularJS双向绑定和依赖反转实例详解
Apr 15 Javascript
学习使用Bootstrap页面排版样式
May 11 Javascript
jQuery Collapse1.1.0折叠插件简单使用
Aug 28 jQuery
JavaScript函数apply()和call()用法与异同分析
Aug 10 Javascript
node错误处理与日志记录的实现
Dec 24 Javascript
JS中async/await实现异步调用的方法
Aug 28 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中计算中文字符串长度、截取中文字符串的函数代码
2011/08/09 PHP
浅析php插件 HTMLPurifier HTML解析器
2013/07/01 PHP
LNMP部署laravel以及xhprof安装使用教程
2017/09/14 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
2018/12/21 PHP
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
JavaScript实现x秒后自动跳转到一个页面
2013/01/03 Javascript
js 获取class的元素的方法 以及创建方法getElementsByClassName
2013/03/11 Javascript
js使浏览器窗口最大化实现代码(适用于IE)
2013/08/07 Javascript
js 获取、清空input type=&quot;file&quot;的值示例代码
2014/02/19 Javascript
window.location.href的用法(动态输出跳转)
2014/08/09 Javascript
javascript实现禁止复制网页内容
2014/12/16 Javascript
jQuery Ajax页面局部加载方法汇总
2016/06/02 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
2017/12/19 jQuery
Vue封装一个简单轻量的上传文件组件的示例
2018/03/21 Javascript
微信小程序实现弹出菜单
2018/07/19 Javascript
使用Nuxt.js改造已有项目的方法
2018/08/07 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
2019/07/10 Javascript
vue+elementUi图片上传组件使用详解
2019/08/20 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
Vue+ElementUI 中级联选择器Bug问题的解决
2020/07/31 Javascript
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
2020/02/10 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
HTML5实现一个能够移动的小坦克示例代码
2013/09/02 HTML / CSS
法律专业自我鉴定
2013/10/03 职场文书
创建服务型党组织实施方案
2014/02/25 职场文书
药学职务聘任书
2014/03/29 职场文书
学校领导干部民主生活会整改方案
2014/09/29 职场文书
民政局未婚证明
2015/06/15 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
详解PHP设计模式之依赖注入模式
2021/05/25 PHP
MySQL Server层四个日志的实现
2022/03/31 MySQL
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫