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类(纯JS, Ajax模式)
Mar 12 Javascript
P3P Header解决Cookie跨域的问题
Mar 12 Javascript
javascript如何操作HTML下拉列表标签
Aug 20 Javascript
详解JavaScript中的Unescape()和String() 函数
Nov 09 Javascript
快速掌握WordPress中加载JavaScript脚本的方法
Dec 17 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
Dec 05 Javascript
微信小程序 基础组件与导航组件详细介绍
Feb 21 Javascript
Vue的百度地图插件尝试使用
Sep 06 Javascript
Vue.js最佳实践(五招助你成为vuejs大师)
May 04 Javascript
vue实现移动端省市区选择
Sep 27 Javascript
vue.js this.$router.push获取不到params参数问题
Mar 03 Javascript
vue组件是如何解析及渲染的?
Jan 13 Vue.js
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
PHP4之真OO
2006/10/09 PHP
php下目前为目最全的CURL中文说明
2010/08/01 PHP
PHP正则表达式之定界符和原子介绍
2012/10/05 PHP
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
判断脚本加载是否完成的方法
2009/05/26 Javascript
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
检测jQuery.js是否已加载的判断代码
2011/05/20 Javascript
Dom 结点创建 基础知识
2011/10/01 Javascript
Javascript中string转date示例代码
2013/11/01 Javascript
项目中常用的JS方法整理
2015/01/30 Javascript
Nodejs全局安装和本地安装的不同之处
2016/07/04 NodeJs
基于js对象,操作属性、方法详解
2016/08/11 Javascript
jQuery实现判断控件是否显示的方法
2017/01/11 Javascript
教你5分钟学会用requirejs(必看篇)
2017/07/25 Javascript
jQuery响应滚动条事件功能示例
2017/10/14 jQuery
jQuery实现图片上传预览效果功能完整实例【测试可用】
2018/05/28 jQuery
vue-router 实现导航守卫(路由卫士)的实例代码
2018/09/02 Javascript
微信小程序实现的一键拨号功能示例
2019/04/24 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
2019/06/20 Javascript
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
Python实现重建二叉树的三种方法详解
2018/06/23 Python
使用Scrapy爬取动态数据
2018/10/21 Python
Python Django简单实现session登录注销过程详解
2019/08/06 Python
Python如何使用BeautifulSoup爬取网页信息
2019/11/26 Python
解决django接口无法通过ip进行访问的问题
2020/03/27 Python
Python基于yaml文件配置logging日志过程解析
2020/06/23 Python
日本最大美瞳直送网:Morecontact(中文)
2019/04/03 全球购物
适用于所有创业者的创业计划书
2014/02/05 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
小学清明节活动总结
2014/07/04 职场文书
领导干部作风建设剖析材料
2014/10/11 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
护士爱岗敬业心得体会
2016/01/25 职场文书