JavaScript sort数组排序方法和自我实现排序方法小结


Posted in Javascript onJune 06, 2016

 前言

针对一个数组进行排序,一个很常见的需求.尤其在后端.当然,前端也是有这个需求的.

当然,数组排序,是有现成的方法的.就是sort()方法.

我们先开看下这个.

标准答案,sort方法

var arr = [45,98,67,57,85,6,58,83,48,18];
console.log('原数组');
console.log(arr);
console.log('sort方法从小到大排序');
console.log(arr.sort(function(a,b){return a-b}));
console.log('sort方法从大到小排序');
console.log(arr.sort(function(a,b){return b-a}));

运行结果如下:

JavaScript sort数组排序方法和自我实现排序方法小结

这里需要注意的是,sort默认是按照字母顺序来进行排序的.因此,我们在排列数字的时候,需要一个自定义函数.

如上面的代码

function(a,b){return a-b}

这就是一个从小到大的排序函数.看上去好简单的样子,但是我不理解,所以,我根据我的想法,来实现排序吧~

我的答案,for方法排序

var arr = [45,98,67,57,85,6,58,83,48,18];
console.log('原数组');
console.log(arr);
console.log('for方法从小到大排序');
console.log(arrSortMinToMax(arr));
console.log('for方法从大到小排序');
console.log(arrSortMaxToMin(arr));
// 找数组中最小的值
function arrMinNum(arr){
var minNum = Infinity, index = -1;
for (var i = 0; i < arr.length; i++) {
if (arr[i]<minNum) {
minNum = arr[i];
index = i;
}
};
return {"minNum":minNum,"index":index};
}
// 返回数组从小到大排序结果
function arrSortMinToMax(arr){
var arrNew = [];
var arrOld = arr.concat();
for (var i = 0; i < arr.length; i++) {
arrNew.push(arrMinNum(arrOld).minNum);
arrOld.splice(arrMinNum(arrOld).index,1)
};
return (arrNew);
}
// 找数组中最大的值
function arrMaxNum(arr){
var maxNum = -Infinity, index = -1;
for (var i = 0; i < arr.length; i++) {
if (arr[i]>maxNum) {
maxNum = arr[i];
index = i;
}
};
return {"maxNum":maxNum,"index":index};
}
// 返回数组从大到小排序结果
function arrSortMaxToMin(arr){
var arrNew = [];
var arrOld = arr.slice(0);
for (var i = 0; i < arr.length; i++) {
arrNew.push(arrMaxNum(arrOld).maxNum);
arrOld.splice(arrMaxNum(arrOld).index,1);
};
console.log(arr)
return (arrNew);
}

运行结果如下图所示

JavaScript sort数组排序方法和自我实现排序方法小结

我的方法中的知识点

1.当一个函数需要返回多条数据的时候,使用json对象格式比较方便.如上面的return {"minNum":minNum,"index":index};

2.如果使用 var arrOld = arr 这种方法来复制一个数组,并且,对arrOld进行操作的话,是会影响到arr这个原数组的.因为javascript分原始类型与引用类型(与java、c#类似)。Array是引用类型。arrOld得到的是引用,所以对arrOld的修改会影响到arr

复制数组的方法(一)var arrOld = arr.concat(); ,原理:concat()函数是用于拼接多个数组的函数,这种写法相当于拼接自己.也就是复制了.

复制数组的方法(二)var arrOld = arr.slice(0) , 原理:slice()函数是一个截取数组的函数,设置值为0,则是全部截取,相当于复制了.

3.splice()方法用于插入、删除或替换数组的元素。这里是使用了其删除数组中指定位置的特性.

4.我的方法和sort方法的差异.

我的方法没有修改原数组,而sort是在原数组的基础上进行的修改.
我的方法返回的是一个新数组,原数组并没有消失或者改变.(好像和上面一句是一个意思….)

5.排序是编程中非常非常基础并且非常非常重要的知识点.sort排序在执行大量数据的情况下,效率还是比较低的.当然,我的方法的效率也是很低的.

本文转载于:http://blog.csdn.net/fungleo/article/details/51555590

以上所述是小编给大家介绍的JavaScript sort数组排序方法和自我实现排序方法小结的全部内容,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对三水点靠木网站的支持。

Javascript 相关文章推荐
使用TextRange获取输入框中光标的位
Oct 14 Javascript
JavaScript学习笔记(二) js对象
Oct 25 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
Mar 31 Javascript
Bootstrap入门书籍之(三)栅格系统
Feb 17 Javascript
javaScript中的原型解析【推荐】
May 05 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
May 28 Javascript
jQuery实现简单的计时器功能实例分析
Aug 29 jQuery
prototype.js简单实现ajax功能示例
Oct 18 Javascript
解读vue生成的文件目录结构及说明
Nov 27 Javascript
Vue精简版风格指南(推荐)
Jan 30 Javascript
Vue.js 利用v-for中的index值实现隔行变色
Aug 01 Javascript
jQuery 选择器用法实例分析【prev + next】
May 22 jQuery
深入理解逻辑表达式的用法 与或非的用法
Jun 06 #Javascript
基于JS实现数字+字母+中文的混合排序方法
Jun 06 #Javascript
jquery树形菜单效果的简单实例
Jun 06 #Javascript
逻辑表达式中与或非的用法详解
Jun 06 #Javascript
node.js 中国天气预报 简单实现
Jun 06 #Javascript
JS中mouseover和mouseout多次触发问题如何解决
Jun 06 #Javascript
js获取元素的外链样式的简单实现方法
Jun 06 #Javascript
You might like
测试php连接mysql是否成功的代码分享
2014/01/24 PHP
php调用google接口生成二维码示例
2014/04/28 PHP
php学习笔记之面向对象
2014/11/08 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
PHP 设计模式系列之 specification规格模式
2016/01/10 PHP
PHP 断点续传实例详解
2017/11/11 PHP
基于jquery的滑动样例代码
2010/11/20 Javascript
jQuery实现密保互斥问题解决方案
2013/08/16 Javascript
NodeJS制作爬虫全过程
2014/12/22 NodeJs
ECMAScript 5中的属性描述符详解
2015/03/02 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
node.js插件nodeclipse安装图文教程
2020/10/19 Javascript
webpack学习--webpack经典7分钟入门教程
2017/06/28 Javascript
JavaScript数据结构之单链表和循环链表
2017/11/28 Javascript
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
浅谈angular4.0中路由传递参数、获取参数最nice的写法
2018/03/12 Javascript
利用Console来Debug的10个高级技巧汇总
2018/03/26 Javascript
使用Node.js写一个代码生成器的方法步骤
2019/05/10 Javascript
详解js中let与var声明变量的区别
2020/04/05 Javascript
vue基本使用--refs获取组件或元素的实例
2019/11/07 Javascript
微信小程序图片自适应实现解析
2020/01/21 Javascript
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
在Python的Django框架中实现Hacker News的一些功能
2015/04/17 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
Python设计模式之享元模式原理与用法实例分析
2019/01/11 Python
python实现简单图片物体标注工具
2019/03/18 Python
简单了解python 邮件模块的使用方法
2019/07/24 Python
Python3如何对urllib和urllib2进行重构
2019/11/25 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
Lovedrobe官网:英国领先的大码服装品牌
2019/09/19 全球购物
生日派对邀请函
2014/01/13 职场文书
优秀党支部事迹材料
2014/01/14 职场文书
出国留学经济担保书
2014/04/01 职场文书
525心理健康活动总结
2015/05/08 职场文书