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 相关文章推荐
如何用js控制css中的float的代码
Aug 16 Javascript
JavaScript让IE浏览器event对象符合W3C DOM标准
Nov 24 Javascript
jquery实用代码片段集合
Aug 12 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
Mar 05 Javascript
js用Date对象的setDate()函数对日期进行加减操作
Sep 18 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
Nov 24 Javascript
js面向对象的写法
Feb 19 Javascript
JS实现登录页密码的显示和隐藏功能
Dec 06 Javascript
vue实现element-ui对话框可拖拽功能
Aug 17 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
Feb 28 Javascript
解决vue-cli 打包后自定义动画未执行的问题
Nov 12 Javascript
vue webpack build资源相对路径的问题及解决方法
Jun 04 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
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
PHP类相关知识点实例总结
2016/09/28 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
Laravel5.7框架安装与使用学习笔记图文详解
2019/04/02 PHP
动态加载js文件 document.createElement
2006/10/14 Javascript
我见过最全的个人js加解密功能页面
2007/12/12 Javascript
js函数使用技巧之 setTimeout(function(){},0)
2009/02/09 Javascript
深入理解JavaScript定时机制
2010/10/29 Javascript
window.opener用法和用途实例介绍
2013/08/19 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
JavaScript作用域链示例分享
2014/05/27 Javascript
node.js下when.js 的异步编程实践
2014/12/03 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
使用AngularJS2中的指令实现按钮的切换效果
2017/03/27 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
react-native 封装选择弹出框示例(试用ios&amp;android)
2017/07/11 Javascript
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
还不懂递归?读完这篇文章保证你会懂
2018/07/29 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
vue基于element的区间选择组件
2018/09/07 Javascript
详解iframe跨域的几种常用方法(小结)
2019/04/29 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
2019/11/14 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
2020/10/28 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
element中Steps步骤条和Tabs标签页关联的解决
2020/12/08 Javascript
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
python图片验证码生成代码
2016/07/02 Python
python实现数据写入excel表格
2018/03/25 Python
Django上线部署之IIS的配置方法
2019/08/22 Python
Python批量获取并保存手机号归属地和运营商的示例
2020/10/09 Python
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
Clos19英国:高档香槟、葡萄酒和烈酒在线购物平台
2020/07/10 全球购物
电力企业职工培训心得体会
2016/01/11 职场文书
欧元符号 €
2022/02/17 杂记
Python读取和写入Excel数据
2022/04/20 Python