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生成/解析dom的CDATA类型的字段的代码
Apr 22 Javascript
自己动手开发jQuery插件教程
Aug 25 Javascript
常用一些Javascript判断函数
Aug 14 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
May 07 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
Dec 09 Javascript
jQuery ajax的功能实现方法详解
Jan 06 Javascript
JavaScript对象引用与赋值实例详解
Mar 15 Javascript
react-native动态切换tab组件的方法
Jul 07 Javascript
vue设计一个倒计时秒杀的组件详解
Apr 06 Javascript
javascript关于“时间”的一次探索
Jul 24 Javascript
在Vue中实现随hash改变响应菜单高亮
Mar 09 Javascript
Ajax实现局部刷新的方法实例
Mar 31 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
法兰绒滤网冲泡
2021/03/03 冲泡冲煮
又十个超级有用的PHP代码片段
2015/09/24 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
Dom加载让图片加载完再执行的脚本代码
2008/05/15 Javascript
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
js常用代码段整理
2011/11/30 Javascript
javascript列表框操作函数集合汇总
2013/11/28 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
Jquery结合HTML5实现文件上传
2015/06/25 Javascript
JS使用单链表统计英语单词出现次数
2016/06/16 Javascript
AngularJS实现表单验证功能
2017/01/09 Javascript
使用Vue完成一个简单的todolist的方法
2017/12/01 Javascript
Angular5给组件本身的标签添加样式class的方法
2018/04/07 Javascript
Centos Python2 升级到Python3的简单实现
2016/06/21 Python
Python实现简单过滤文本段的方法
2017/05/24 Python
python得到windows自启动列表的方法
2018/10/14 Python
Python 读取用户指令和格式化打印实现解析
2019/09/02 Python
python pyenv多版本管理工具的使用
2019/12/23 Python
使用python实现飞机大战游戏
2020/03/23 Python
深入了解python列表(LIST)
2020/06/08 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
Python结合Window计划任务监测邮件的示例代码
2020/08/05 Python
python处理写入数据代码讲解
2020/10/22 Python
Matplotlib animation模块实现动态图
2021/02/25 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
Vilebrequin欧洲官网:法国豪华泳装品牌(男士沙滩裤)
2018/04/14 全球购物
Ruby中的保护方法和私有方法与一般面向对象程序设计语言的一样吗
2013/05/01 面试题
自荐信的五个重要部分
2013/10/29 职场文书
秸秆管理实施方案
2014/03/15 职场文书
学生吸烟检讨书
2014/09/14 职场文书
委托书范本格式
2019/04/18 职场文书
【2·13】一图读懂中国无线电发展
2022/02/18 无线电