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实现回放拖拽轨迹从过程上进行分析
Jun 26 Javascript
JQuery调用绑定click事件的3种写法
Mar 28 Javascript
ECMAScript5(ES5)中bind方法使用小结
May 07 Javascript
浅谈JS之iframe中的窗口
Sep 13 Javascript
JS实现仿PS的调色板效果完整实例
Dec 21 Javascript
利用10行js代码实现上下滚动公告效果
Dec 08 Javascript
JavaScript 跨域之POST实现方法
May 07 Javascript
node puppeteer(headless chrome)实现网站登录
May 09 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
Jun 20 jQuery
js正则取值的结果数组调试方法
Oct 10 Javascript
在Vue项目中用fullcalendar制作日程表的示例代码
Aug 04 Javascript
vue.config.js常用配置详解
Nov 14 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编译安装php-amq扩展简明教程
2016/06/25 PHP
PHP+MySQL实现模糊查询员工信息功能示例
2018/06/01 PHP
ie focus bug 解决方法
2009/09/03 Javascript
写给想学习Javascript的朋友一点学习经验小结
2010/11/23 Javascript
js 上传图片预览问题
2010/12/06 Javascript
12行javascript代码绘制一个八卦图
2015/04/02 Javascript
jQuery超精致图片轮播幻灯片特效代码分享
2015/09/10 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
JavaScript中数组添加值和访问值常见问题
2016/02/06 Javascript
Bootstrap每天必学之响应式导航、轮播图
2016/04/25 Javascript
使用vue.js开发时一些注意事项
2016/04/27 Javascript
JavaScript:Array类型全面解析
2016/05/19 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
js判断一个字符串是以某个字符串开头的简单实例
2016/12/27 Javascript
AngularJs 常用的过滤器
2017/05/15 Javascript
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
laydate日历控件使用方法详解
2017/11/20 Javascript
angularjs实现table增加tr的方法
2018/02/27 Javascript
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
2019/08/03 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
2019/08/13 Javascript
vue中beforeRouteLeave实现页面回退不刷新的示例代码
2019/11/01 Javascript
vue 解决addRoutes多次添加路由重复的操作
2020/08/04 Javascript
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
本地文件上传到七牛云服务器示例(七牛云存储)
2014/01/11 Python
Python 实现淘宝秒杀的示例代码
2018/01/02 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
英国排名第一的冲浪店:Ann’s Cottage
2020/06/21 全球购物
售后服务经理岗位职责
2014/02/25 职场文书
法人代表授权委托书范文
2014/09/10 职场文书
文明单位汇报材料
2014/12/24 职场文书
采购内勤岗位职责
2015/04/13 职场文书
在职证明书模板
2015/06/15 职场文书
致接力运动员加油稿
2015/07/21 职场文书
2015年科学教研组工作总结
2015/07/22 职场文书