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.extend函数扩展自己对象的js代码
Dec 09 Javascript
jquery将一个表单序列化为一个对象的方法
Jan 03 Javascript
js格式化金额可选是否带千分位以及保留精度
Jan 28 Javascript
使用百度地图api实现根据地址查询经纬度
Dec 11 Javascript
快速学习jQuery插件 jquery.validate.js表单验证插件使用方法
Dec 01 Javascript
完美实现bootstrap分页查询
Dec 09 Javascript
js通过classname来获取元素的方法
Nov 24 Javascript
xmlplus组件设计系列之图标(ICON)(1)
May 05 Javascript
Angular中点击li标签实现更改颜色的核心代码
Dec 08 Javascript
利用Decorator如何控制Koa路由详解
Jun 26 Javascript
在vue项目中优雅的使用SVG的方法实例详解
Dec 03 Javascript
axios 实现post请求时把对象obj数据转为formdata
Oct 31 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中取得URL的根域名的代码
2011/03/23 PHP
YII路径的用法总结
2014/07/09 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
2016/07/21 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
基于 Swoole 的微信扫码登录功能实现代码
2018/01/15 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
window.location和document.location的区别分析
2008/12/23 Javascript
JavaScript 监听textarea中按键事件
2009/10/08 Javascript
基于jquery的获取浏览器窗口大小的代码
2011/03/28 Javascript
JS中图片缓冲loading技术的实例代码
2013/08/29 Javascript
js抽奖实现随机抽奖代码效果
2013/12/02 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
jQuery实现简单的间隔向上滚动效果
2015/03/09 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
使用selenium抓取淘宝的商品信息实例
2018/02/06 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
微信小程序实现红包雨功能
2018/07/11 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
2019/01/21 Javascript
react koa rematch 如何打造一套服务端渲染架子
2019/06/26 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
2019/09/23 Javascript
js实现烟花特效
2020/03/02 Javascript
JavaScript使用setTimeout实现倒计时效果
2021/02/19 Javascript
[44:47]Ti4 循环赛第三日 iG vs NaVi
2014/07/12 DOTA
Python搭建FTP服务器的方法示例
2018/01/19 Python
Python编程深度学习绘图库之matplotlib
2018/12/28 Python
python搜索包的路径的实现方法
2019/07/19 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
pymongo insert_many 批量插入的实例
2020/12/05 Python
爱尔兰电脑、家电和家具购物网站:Buy It Direct
2019/07/09 全球购物
捷克家具销售网站:SCONTO Nábytek
2020/01/02 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
关爱女孩行动实施方案
2014/03/13 职场文书
外国人聘用意向书
2014/04/01 职场文书
党员大会主持词
2014/04/02 职场文书
师德标兵事迹材料
2014/12/19 职场文书
Pyhton模块和包相关知识总结
2021/05/12 Python