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 相关文章推荐
javascript IFrame 强制刷新代码
Jul 23 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
Jun 24 Javascript
js中string转int把String类型转化成int类型
Aug 13 Javascript
快速解决js中window.location.href不工作的问题
Nov 02 Javascript
微信小程序 picker 组件详解及简单实例
Jan 10 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
Jul 31 Javascript
Vue从TodoList中学父子组件通信
Feb 05 Javascript
VUE 组件转换为微信小程序组件的方法
Nov 06 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
May 09 Javascript
24个ES6方法解决JS实际开发问题(小结)
May 31 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
Dec 03 Javascript
Javascript中Microtask和Macrotask鲜为人知的知识点
Apr 02 Javascript
深入理解逻辑表达式的用法 与或非的用法
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函数解决SQL injection
2006/10/09 PHP
PHP中几种常见的超时处理全面总结
2012/09/11 PHP
php获取301跳转URL简单实例
2013/12/16 PHP
浅析PHP文件下载原理
2014/12/25 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
深入理解PHP中mt_rand()随机数的安全
2017/10/12 PHP
jquery 表单下所有元素的隐藏
2009/07/25 Javascript
模仿JQuery sortable效果 代码有错但值得看看
2009/11/05 Javascript
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
2012/04/14 Javascript
node.js中的path.extname方法使用说明
2014/12/09 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
JavaScript实现的CRC32函数示例
2016/11/23 Javascript
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
layui实现数据分页功能
2019/07/27 Javascript
Vue3 实现双盒子定位Overlay的示例
2020/12/22 Vue.js
Python函数式编程指南(二):从函数开始
2015/06/24 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
python获取代理IP的实例分享
2018/05/07 Python
对Python2与Python3中__bool__方法的差异详解
2018/11/01 Python
初探利用Python进行图文识别(OCR)
2019/02/26 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
Python 发送邮件方法总结
2020/08/10 Python
CSS3截取字符串实例代码【推荐】
2018/06/07 HTML / CSS
美国专业消费电子及摄影器材网站:B&H Photo Video
2019/12/18 全球购物
配置管理计划的主要内容有哪些
2014/06/20 面试题
CSS实现fullpage.js全屏滚动效果的示例代码
2021/03/24 HTML / CSS
优秀员工评语
2014/02/10 职场文书
公司接待方案
2014/03/08 职场文书
应届生求职信
2014/05/31 职场文书
设备管理实施方案
2014/05/31 职场文书
企业公益活动策划方案
2014/08/24 职场文书
该怎么书写道歉信?
2019/07/03 职场文书
搭建zabbix监控以及邮件报警的超级详细教学
2022/07/15 Servers