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 相关文章推荐
node.js中的console.warn方法使用说明
Dec 09 Javascript
JavaScript动态添加style节点的方法
Jun 09 Javascript
jQuery实现html元素拖拽
Jul 21 Javascript
jquery实现Ctrl+Enter提交表单的方法
Jul 21 Javascript
jQuery自定义组件(导入组件)
Nov 08 Javascript
vue日期组件 支持vue1.0和2.0
Jan 09 Javascript
js实现简单的手风琴效果
Feb 27 Javascript
Angular4学习笔记之新建项目的方法
Jul 18 Javascript
JS计算距当前时间的时间差实例
Dec 29 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
May 23 Javascript
微信小程序实现购物车功能
Nov 18 Javascript
微信小程序 WeUI扩展组件库的入门教程
Apr 21 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
php Undefined index和Undefined variable的解决方法
2008/03/27 PHP
php 引用(&amp;)详解
2009/11/20 PHP
解析php中反射的应用
2013/06/18 PHP
php使用function_exists判断函数可用的方法
2014/11/19 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
PHP XML和数组互相转换详解
2016/10/26 PHP
php实现的XML操作(读取)封装类完整实例
2017/02/23 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
js arguments.callee的应用代码
2009/05/07 Javascript
Javascript的一种模块模式
2010/09/08 Javascript
document.compatMode的CSS1compat使用介绍
2014/04/03 Javascript
Js实现自定义右键行为
2015/03/26 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
2016/10/28 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
微信小程序左右滑动切换页面详解及实例代码
2017/02/28 Javascript
浏览器事件循环与vue nextTicket的实现
2019/04/16 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
2021/02/11 Vue.js
python中numpy.zeros(np.zeros)的使用方法
2017/11/07 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
2017/12/28 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
python函数与方法的区别总结
2019/06/23 Python
python格式化输出保留2位小数的实现方法
2019/07/02 Python
Python jieba库用法及实例解析
2019/11/04 Python
python将unicode和str互相转化的实现
2020/05/11 Python
详解python方法之绑定方法与非绑定方法
2020/08/17 Python
Python eval函数原理及用法解析
2020/11/14 Python
英国最大的电脑零售连锁店集团:PC World
2016/10/10 全球购物
美国女士时尚珠宝及配饰购物网站:Icing
2018/07/02 全球购物
某个公司的Java笔面试题
2016/03/11 面试题
东方红海科技面试题软件测试方面
2012/02/08 面试题
三八红旗集体先进事迹材料
2014/05/22 职场文书
市场策划求职信
2014/08/07 职场文书
庆七一活动总结
2014/08/27 职场文书
JavaScript实现贪吃蛇游戏
2021/06/16 Javascript