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中获取出错代码所在文件及行数的代码
Sep 23 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
Jan 02 Javascript
js 数组去重的四种实用方法
Sep 09 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
Apr 06 Javascript
使用AngularJS中的SCE来防止XSS攻击的方法
Jun 18 Javascript
JavaScript简单下拉菜单实例代码
Sep 07 Javascript
利用JS生成博文目录及CSS定制博客
Feb 10 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
May 04 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
Sep 19 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
Jun 19 Javascript
详解组件库的webpack构建速度优化
Jun 18 Javascript
jQuery实现每日秒杀商品倒计时功能
Sep 06 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
解决安装WampServer时提示缺少msvcr110.dll文件的问题
2017/07/09 PHP
PHP中遍历数组的三种常用方法实例分析
2019/06/24 PHP
javascript动态加载三
2012/08/22 Javascript
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
Javascript基础教程之定义和调用函数
2015/01/18 Javascript
javascript中的Function.prototye.bind
2015/06/25 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
2015/09/09 Javascript
js判断主流浏览器类型和版本号的简单实现代码
2016/05/26 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
vue2实现数据请求显示loading图
2017/11/28 Javascript
Node.js文件编码格式的转换的方法
2018/04/27 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
js之切换全屏和退出全屏实现代码实例
2019/09/09 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
高效使用Python字典的清单
2018/04/04 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
2019/06/17 Python
pandas实现to_sql将DataFrame保存到数据库中
2019/07/03 Python
使用python绘制二维图形示例
2019/11/22 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
详解python metaclass(元类)
2020/08/13 Python
Pycharm常用快捷键总结及配置方法
2020/11/14 Python
python爬虫使用scrapy注意事项
2020/11/23 Python
初三物理教学反思
2014/01/21 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
保卫钓鱼岛口号
2014/06/20 职场文书
做一个有道德的人活动实施方案
2014/08/23 职场文书
保险公司演讲稿
2014/09/02 职场文书
数学考试作弊检讨书300字
2015/02/16 职场文书
pytorch加载预训练模型与自己模型不匹配的解决方案
2021/05/13 Python
react中的DOM操作实现
2021/06/30 Javascript
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle
优化Mysql查询的示例
2022/04/26 MySQL