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 相关文章推荐
Extjs4 GridPanel的主要配置参数详细介绍
Apr 18 Javascript
JS中图片缓冲loading技术的实例代码
Aug 29 Javascript
js关于精确计算和数值格式化以及直接引js文件
Jan 28 Javascript
jquery如何根据值设置默认的选中项
Mar 17 Javascript
再谈javascript原型继承
Nov 10 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
Jul 18 Javascript
vue router使用query和params传参的使用和区别
Nov 13 Javascript
js实现移动端轮播图
Dec 21 Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
Feb 02 Javascript
Javascript删除数组里的某个元素
Feb 28 Javascript
Vue基础学习之项目整合及优化
Jun 02 Javascript
jQuery Datatables 动态列+跨列合并实现代码
Jan 30 jQuery
看了就知道什么是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
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
php结合飞信 免费天气预报短信
2009/05/07 PHP
thinkPHP下ueditor的使用方法详解
2015/12/26 PHP
Laravel日志用法详解
2016/10/09 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
JavaScript函数、方法、对象代码
2008/10/29 Javascript
通过正则表达式实现表单验证是否为中文
2014/02/18 Javascript
jquery $.trim()方法使用介绍
2014/05/21 Javascript
js 操作符汇总
2014/11/08 Javascript
深入理解Java线程编程中的阻塞队列容器
2015/12/07 Javascript
jquery表单验证插件validation使用方法详解
2017/01/20 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
es6学习笔记之Async函数的使用示例
2017/05/11 Javascript
Js判断H5上下滑动方向及滑动到顶部和底部判断的示例代码
2017/11/15 Javascript
vue3.0 CLI - 2.6 - 组件的复用入门教程
2018/09/14 Javascript
JavaScript变速动画函数封装添加任意多个属性
2019/04/03 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
Python用模块pytz来转换时区
2016/08/19 Python
Python入门_条件控制(详解)
2017/05/16 Python
Python Learning 列表的更多操作及示例代码
2018/08/22 Python
Python Opencv任意形状目标检测并绘制框图
2019/07/23 Python
详解python中的数据类型和控制流
2019/08/08 Python
Python利用requests模块下载图片实例代码
2019/08/12 Python
有关Tensorflow梯度下降常用的优化方法分享
2020/02/04 Python
python对execl 处理操作代码
2020/06/22 Python
协程Python 中实现多任务耗资源最小的方式
2020/10/19 Python
浅析Python 中的 WSGI 接口和 WSGI 服务的运行
2020/12/09 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
2020/12/14 Python
Crabtree & Evelyn英国官网:瑰珀翠护手霜、香水、沐浴和身体护理
2018/04/26 全球购物
奥林匹亚体育:Olympia Sports
2020/12/30 全球购物
好家长事迹材料
2014/01/23 职场文书
竞选大队干部演讲稿
2014/09/11 职场文书
2014年英语教师工作总结
2014/12/03 职场文书
2015年施工员工作总结范文
2015/04/20 职场文书
MySQL复制问题的三个参数分析
2021/04/07 MySQL
JavaWeb 入门篇(3)ServletContext 详解 具体应用
2021/07/16 Java/Android