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 OOP类与继承
Nov 15 Javascript
基于jquery实现的鼠标滑过按钮改变背景图片
Jul 15 Javascript
js禁止document element对象选中文本实现代码
Mar 21 Javascript
JavaScript阻止事件冒泡示例分享
Dec 28 Javascript
Node.js的包详细介绍
Jan 14 Javascript
理解javascript定时器中的setTimeout与setInterval
Feb 23 Javascript
Javascript使用function创建类的两种方法(推荐)
Nov 19 Javascript
jQuery鼠标悬停内容动画切换效果
Apr 27 jQuery
vue-router实现编程式导航的代码实例
Jan 19 Javascript
详解Vuex下Store的模块化拆分实践
Jul 31 Javascript
解决vue项目,npm run build后,报路径错的问题
Aug 13 Javascript
解决vue中axios设置超时(超过5分钟)没反应的问题
Sep 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
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
2014/08/20 PHP
PHP vsprintf()函数格式化字符串操作原理解析
2020/07/14 PHP
Aster vs KG BO3 第一场2.19
2021/03/10 DOTA
用javascript获取当页面上鼠标光标位置和触发事件的对象的代码
2009/12/09 Javascript
javascript抖动元素的小例子
2013/10/28 Javascript
js字符串完全替换函数分享
2014/12/03 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
基于bootstrap实现收缩导航条
2017/03/17 Javascript
vue2.0中click点击当前li实现动态切换class
2017/06/21 Javascript
Angular排序实例详解
2017/06/28 Javascript
解决vue router使用 history 模式刷新后404问题
2017/07/19 Javascript
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
JavaScript事件对象深入详解
2018/12/30 Javascript
js实现九宫格抽奖
2020/03/19 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
2021/02/11 Vue.js
Python实现115网盘自动下载的方法
2014/09/30 Python
python排序方法实例分析
2015/04/30 Python
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
python 读写txt文件 json文件的实现方法
2016/10/22 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
2017/08/31 Python
Python通过matplotlib画双层饼图及环形图简单示例
2017/12/15 Python
python实现学生管理系统
2018/01/11 Python
Python实现的栈、队列、文件目录遍历操作示例
2019/05/06 Python
Python 经典算法100及解析(小结)
2019/09/13 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
苹果台湾官网:Apple台湾
2019/01/05 全球购物
历史学专业推荐信
2013/11/06 职场文书
住宅使用说明书
2014/05/09 职场文书
文明演讲稿范文
2014/05/12 职场文书
2014年中秋寄语
2014/08/11 职场文书
机关领导查摆四风思想汇报
2014/09/13 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
2014年人事行政工作总结
2014/12/03 职场文书
工程主管竞聘书
2015/09/15 职场文书
Elasticsearch6.2服务器升配后的bug(避坑指南)
2022/09/23 Servers