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 相关文章推荐
JavaScript入门教程(8) Location地址对象
Jan 31 Javascript
IE6/7/8/9不支持exec的简写方式
May 25 Javascript
ie下动态加态js文件的方法
Sep 13 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
Aug 25 Javascript
JS实现左右拖动改变内容显示区域大小的方法
Oct 13 Javascript
js html css实现复选框全选与反选
Oct 09 Javascript
浅谈javascript中的事件冒泡和事件捕获
Dec 28 Javascript
jQuery文字轮播特效
Feb 12 Javascript
vue一个页面实现音乐播放器的示例
Feb 06 Javascript
vue-自定义组件传值的实例讲解
Sep 18 Javascript
微信小程序如何实现五星评价功能
Oct 15 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
Nov 11 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
smarty简单入门实例
2014/11/28 PHP
php排序算法实例分析
2016/10/17 PHP
php web环境和命令行环境下查找php.ini的位置
2019/07/17 PHP
使用jquery给input和textarea设定ie中的focus
2008/05/29 Javascript
避免 showModalDialog 弹出新窗体的原因分析
2010/05/31 Javascript
js实时获取系统当前时间实例代码
2013/06/28 Javascript
javascript学习总结之js使用技巧
2015/09/02 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
AngularJS中使用three.js的实例详解
2017/07/21 Javascript
Vue 滚动行为的具体使用方法
2017/09/13 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
Vue数据双向绑定原理实例解析
2020/05/15 Javascript
python中global用法实例分析
2015/04/30 Python
Python 用Redis简单实现分布式爬虫的方法
2017/11/23 Python
Python入门之后再看点什么好?
2018/03/05 Python
使用NumPy和pandas对CSV文件进行写操作的实例
2018/06/14 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
django项目搭建与Session使用详解
2018/10/10 Python
Python os.rename() 重命名目录和文件的示例
2018/10/25 Python
Python 微信之获取好友昵称并制作wordcloud的实例
2019/02/21 Python
Django框架首页和登录页分离操作示例
2019/05/28 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
Python迭代器协议及for循环工作机制详解
2020/07/14 Python
python try...finally...的实现方法
2020/11/25 Python
司机的工作范围及职责
2013/11/13 职场文书
2014年体育教学工作总结
2014/12/09 职场文书
教师个人学习总结
2015/02/11 职场文书
前台接待员岗位职责
2015/04/15 职场文书
农民工工资支付承诺书
2015/05/04 职场文书
Spring Data JPA使用JPQL与原生SQL进行查询的操作
2021/06/15 Java/Android
redis cluster支持pipeline的实现思路
2021/06/23 Redis