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 相关文章推荐
JSON语法五大要素图文介绍
Dec 04 Javascript
js 获取屏幕各种宽高的方法(浏览器兼容)
May 15 Javascript
JS:window.onload的使用介绍
Nov 13 Javascript
JavaScript监听和禁用浏览器回车事件实例
Jan 31 Javascript
js运动动画的八个知识点
Mar 12 Javascript
JQuery中ajax方法访问web服务实例
Jul 18 Javascript
jQuery操作iframe中js函数的方法小结
Jul 06 Javascript
浅谈webpack4.x 入门(一篇足矣)
Sep 05 Javascript
详解webpack模块加载器兼打包工具
Sep 11 Javascript
详解vue-cli中使用rem,vue自适应
May 06 Javascript
Vue form表单动态添加组件实战案例
Sep 02 Javascript
用vue写一个日历
Nov 02 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 HTML代码串截取代码
2008/12/29 PHP
超级简单的php+mysql留言本源码
2009/11/11 PHP
PHP句法规则详解 入门学习
2011/11/09 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
2014/06/23 PHP
php使用PDO方法详解
2014/12/27 PHP
php动态添加url查询参数的方法
2015/04/14 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
JavaScript 学习初步 入门教程
2010/03/25 Javascript
jquery中的事件处理详细介绍
2013/06/24 Javascript
javascript从右边截取指定字符串的三种实现方法
2013/11/29 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
js实现StringBuffer的简单实例
2016/09/02 Javascript
JS中Array数组学习总结
2017/01/18 Javascript
JS打开摄像头并截图上传示例
2017/02/18 Javascript
从零学习node.js之简易的网络爬虫(四)
2017/02/22 Javascript
vue实现todolist单页面应用
2017/04/11 Javascript
Angular.js中数组操作的方法教程
2017/07/31 Javascript
微信小程序中使用自定义图标(阿里icon)的方法
2018/08/20 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
2018/08/22 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
ES6中Symbol、Set和Map用法详解
2019/08/20 Javascript
Python算法之栈(stack)的实现
2014/08/18 Python
介绍Python中的fabs()方法的使用
2015/05/14 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
Python守护进程和脚本单例运行详解
2017/01/06 Python
python下载图片实现方法(超简单)
2017/07/21 Python
Python AES加密实例解析
2018/01/18 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
《雨霖铃》教学反思
2014/02/22 职场文书
经典商业广告词
2014/03/13 职场文书
职业生涯规划书之大学四年
2019/08/07 职场文书
致创业的您:这类人不适合餐饮创业
2019/08/19 职场文书