javascript中sort() 方法使用详解


Posted in Javascript onAugust 30, 2015

语法:arrayObject.sort(sortby);参数sortby可选。规定排序顺序。必须是函数。

sort() 方法用于对数组的元素进行排序。

如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,

首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。

比较函数应该具有两个参数 a 和 b,其返回值如下:

 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。

 若 a 等于 b,则返回 0。

 若 a 大于 b,则返回一个大于 0 的值。

 用js中的sort()方法排序数字

<script>
  var arr = [23,12,1,34,116,8,18,37,56,50];
  alert(arr.sort();
</script>

 

返回:[1, 116, 12, 18, 23, 34, 37, 50, 56, 8]

上面的代码没有按照数值的大小对数字进行排序,要实现这一点,就必须使用一个排序函数:

<script>
  var arr = [23,12,1,34,116,8,18,37,56,50];
  function sequence(a,b){
    if (a>b) {
      return 1;
    }else if(a<b){
      return -1
    }else{
      return 0;
    }
  }
  console.log(arr.sort(sequence));
</script>

返回:[1, 8, 12, 18, 23, 34, 37, 50, 56, 116] (没有问题)

当然也可以把排序函数写到sort()方法里面:

<script>
  var arr = [23,12,1,34,116,8,18,37,56,50];
  var arr2 = arr.sort(function(a,b){
     if (a>b) {
      return 1;
    }else if(a<b){
      return -1
    }else{
      return 0;
    }  
  })
  console.log(arr2);
</script>

返回:[1, 8, 12, 18, 23, 34, 37, 50, 56, 116] (也没有问题)

也可以简化成这样的写法
因为:若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。

若 a 等于 b,则返回 0。

若 a 大于 b,则返回一个大于 0 的值

<script>
   var arr = [23,12,1,34,116,8,18,37,56,50];
   function sequence(a,b){
     return a - b;
   }
   console.log(arr.sort(sequence));
 </script>

返回:[1, 8, 12, 18, 23, 34, 37, 50, 56, 116] (也是正确的)

关系字母顺序进行排序 就简单多了,直接用sort()方法就OK了:

<script>
   var arr = ['fanda','banner','find','zoom','index','width','javascript'];
   console.log(arr.sort());
 </script>

返回:["banner", "fanda", "find", "index", "javascript", "width", "zoom"]

 现在在学习javascript中,发现sort()函数是有点奇怪的东西(可能是本人水平的问题-_-!),于是就在这里记录一下自己找到的东西吧。sort()这个方法的参数很奇怪,必须是函数,但也是可选参数,如果没有参数的话,就会默认以字符串的字典顺序来排列(就算是数值,也会被转化为字符串来处理)。这个参数是要能够比较两个值的大小,如:

function sortNumber(a, b){

   return a - b; //这里返回的是他们的差值,如果是小于0的值,就会将a排在前面,如果大于0,就会将b排在前面,如果是0的话,就随便。(冒泡排序法!!)

}

 应用如下(这个例子太经典了!!):

<script type="text/javascript">
function sortNumber(a,b){return a - b}
var arr = new Array(3)
arr[0] = "10";
arr[1] = "5";
arr[2] = "4";
document.write(arr + "<br />");
document.write(arr.sort(sortNumber));
</script>

那么原本是10,5,4的排列就会变成4,5,10.这里说明一下这个过程,明明sortNumber应该是有两个参数,但是我们在调用时却一个参数都没有,怎么进行比较啊?这里是这样的,当arr从第一个数开始调用sort时,10前面是没有数与它比较的,所以就到第二个,就是5,这时10就会与5比较,于是就会调用sortNumber并将10和5传进去,这是sort()的特性。

Javascript 相关文章推荐
JavaScript asp.net 获取当前超链接中的文本
Apr 14 Javascript
用Javascript评估用户输入密码的强度实现代码
Nov 30 Javascript
JS中toFixed()方法引起的问题如何解决
Nov 20 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
Jan 26 Javascript
理解javascript中的回调函数(callback)
Sep 02 Javascript
基于jQuery插件实现环形图标菜单旋转切换特效
May 15 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
Oct 31 Javascript
使用JS正则表达式 替换括号,尖括号等
Nov 29 Javascript
详解Vue 开发模式下跨域问题
Jun 06 Javascript
jQuery中each方法的使用详解
Mar 18 jQuery
Vue2.X 通过AJAX动态更新数据
Jul 17 Javascript
详解React native fetch遇到的坑
Aug 30 Javascript
javascript中的正则表达式使用详解
Aug 30 #Javascript
jQuery鼠标事件汇总
Aug 30 #Javascript
简单谈谈javascript中的变量、作用域和内存问题
Aug 30 #Javascript
jquery专业的导航菜单特效代码分享
Aug 29 #Javascript
js实现基于正则表达式的轻量提示插件
Aug 29 #Javascript
js精美的幻灯片画集特效代码分享
Aug 29 #Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
Aug 28 #Javascript
You might like
浅析php中json_encode()和json_decode()
2014/05/25 PHP
Thinkphp实现站点静态化的方法详解
2017/03/21 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
2019/04/10 PHP
thinkphp3.2框架中where条件查询用法总结
2019/08/13 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
javascript之学会吝啬 精简代码
2010/04/25 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
简单实现js页面切换功能
2021/01/10 Javascript
AngularJS Ajax详解及示例代码
2016/08/17 Javascript
Websocket协议详解及简单实例代码
2016/12/12 Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
2017/06/25 Javascript
JS数组操作中的经典算法实例讲解
2017/07/26 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
2018/01/06 jQuery
详解webpack模块化管理和打包工具
2018/04/21 Javascript
JavaScript基于数组实现的栈与队列操作示例
2018/12/22 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
angular6开发steps步骤条组件
2019/07/04 Javascript
JavaScript实现简单的计算器
2020/01/16 Javascript
[03:07]完美世界DOTA2联赛PWL DAY10 决赛集锦
2020/11/11 DOTA
python读取json文件并将数据插入到mongodb的方法
2015/03/23 Python
Python编程入门的一些基本知识
2015/05/13 Python
Python实现树莓派WiFi断线自动重连的实例代码
2017/03/16 Python
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
python按行读取文件并找出其中指定字符串
2019/08/08 Python
解决python父线程关闭后子线程不关闭问题
2020/04/25 Python
Python3爬虫关于识别检验滑动验证码的实例
2020/07/30 Python
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
我爱我校演讲稿
2014/05/21 职场文书
2015世界地球日活动总结
2015/02/09 职场文书
2015年业务员工作总结范文
2015/04/07 职场文书
员工手册董事长致辞
2015/07/29 职场文书
2019安全宣传标语大全
2019/08/14 职场文书
使用Oracle跟踪文件的问题详解
2021/06/28 Oracle
tp5使用layui实现多个图片上传(带附件选择)的方法实例
2021/11/17 PHP
Redis特殊数据类型bitmap位图
2022/06/01 Redis