js模拟实现Array的sort方法


Posted in Javascript onDecember 11, 2007

JavaScript的Array对象有一个sort方法,用于实现对数组元素的排序,该方法默认按照数组项ASCII 字符顺序升序排列。  
如[6,7,9,1,-1].sort();执行后数组变为[-1,1,6,7,9]。  

对于需要降序排列或非字符串排序,该方法就不能很好的执行了。  

当然,sort有一个可选参数,它能帮我们解决这个问题,通过为sort传入一个函数,sort根据函数返回值进行排序。  

数组为该函数默认传入数组中的两个元素,如传入a,b,如果函数返回值大于0,则排序方式为b,a,如果返回值小于0,则排序结果为a,b。  

具体含义不好解释,当初我也对这个sort其到底是怎么排序的不理解。  

如果知道了其实现过程,就对他的排序原理明了了。  

sort的实现其实很像是一个简单的冒泡排序。  

偶今日对其进行了模拟,看懂这个函数你一定就明白sort的原理了。  

<script type="text/javascript">  
 <!--  
  var myarray = new Array(8,6,7,9,1,-1,4);  
  var myarray1 = new Array(8,6,7,9,1,-1,4);  
  var sortAsc = function(x,y) { return x-y; };  
  var sortDesc = function(x,y) { return y-x; };  
  Array.prototype.st=function(fn){  
    var t;  
    fn=fn||function(x,y){return x-y};  
    for(var i=0;i<this.length;i++){  
      for(var j=i;j<this.length;j++){  
        if(fn(this[i],this[j])>0){  
          t=this[i];  
          this[i]=this[j];  
          this[j]=t;  
        }  
      }  
    }  
  }  
  myarray.st();  
  alert("默认升序排列:"+myarray);  

  myarray.st(sortDesc);  
  alert("降序排列:"+myarray);  

  myarray.st(sortAsc);  
  alert("升序排列:"+myarray);  
    
  myarray1.sort(function(){return 1}); //注:js默认的sort对此排序结果跟这个不一样,其排序方式还暂不理解  
  alert("逆序排列:"+myarray1);    
    
 //-->  
 </script>

总结

以上所述是小编给大家介绍的js模拟实现Array的sort方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JQuery学习笔记 nt-child的使用
Jan 17 Javascript
js使用循环清空某个div中的input标签值
Sep 29 Javascript
javascript实现俄罗斯方块游戏的思路和方法
Apr 27 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
Jun 25 Javascript
js 创建对象 经典模式全面了解
Aug 16 Javascript
javascript实现无法关闭的弹框
Nov 27 Javascript
PHP 实现一种多文件上传的方法
Sep 20 Javascript
vue内置指令详解
Apr 03 Javascript
Angular学习教程之RouterLink花式跳转
May 03 Javascript
Vue keepAlive 数据缓存工具实现返回上一个页面浏览的位置
May 10 Javascript
移动端手指操控左右滑动的菜单
Sep 08 Javascript
Node对CommonJS的模块规范
Nov 06 Javascript
看了就知道什么是JSON
Dec 09 #Javascript
javascript while语句和do while语句的区别分析
Dec 08 #Javascript
js中将多个语句写成一个语句的两种方法小结
Dec 08 #Javascript
JavaScript开发时的五个注意事项
Dec 08 #Javascript
JS的递增/递减运算符和带操作的赋值运算符的等价式
Dec 08 #Javascript
javascript数组使用调用方法汇总
Dec 08 #Javascript
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
Dec 08 #Javascript
You might like
使用Apache的rewrite技术
2006/06/22 PHP
使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
2013/04/26 PHP
PHP解密Unicode及Escape加密字符串
2015/05/17 PHP
mac下多个php版本快速切换的方法
2016/10/09 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
2017/10/26 PHP
jQuery EasyUI API 中文文档 搜索框
2011/09/29 Javascript
script的async属性以非阻塞的模式加载脚本
2013/01/15 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
ES6新增的math,Number方法
2017/08/06 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
在JS循环中使用async/await的方法
2018/10/12 Javascript
JS+CSS3实现的简易钟表效果示例
2019/04/13 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
2019/05/07 Javascript
vue.js实现左边导航切换右边内容
2019/10/21 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
2019/09/10 Python
python使用配置文件过程详解
2019/12/28 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
python如何实现复制目录到指定目录
2020/02/13 Python
python词云库wordCloud使用方法详解(解决中文乱码)
2020/02/17 Python
python实现与redis交互操作详解
2020/04/21 Python
Python 实现一行输入多个数字(用空格隔开)
2020/04/29 Python
Python filter过滤器原理及实例应用
2020/08/18 Python
python反爬虫方法的优缺点分析
2020/11/25 Python
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
会计专业自我鉴定范文
2013/10/06 职场文书
老师的检讨书
2014/02/23 职场文书
2014年班级工作总结
2014/11/14 职场文书
2015年第31个教师节致辞
2015/07/31 职场文书
检讨书怎么写?
2019/06/21 职场文书
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS