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 相关文章推荐
js 3种归并操作的实例代码
Oct 30 Javascript
JS实现鼠标箭头变成一个燃烧烛光效果的方法
Feb 28 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
May 03 Javascript
Vuejs第十篇之vuejs父子组件通信
Sep 06 Javascript
JS三目运算(三元运算)方法详解
Mar 01 Javascript
jQuery时间验证和转换为标准格式的时间格式
Mar 06 Javascript
Javascript实现数组中的元素上下移动
Apr 28 Javascript
JavaScript变量提升和严格模式实例分析
Jan 27 Javascript
详解50行代码,Node爬虫练手项目
Apr 22 Javascript
用vscode开发vue应用的方法步骤
May 06 Javascript
vue通信方式EventBus的实现代码详解
Jun 10 Javascript
layui前端时间戳转化实例
Nov 15 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
echo(),print(),print_r()之间的区别?
2006/11/19 PHP
使用php get_headers 判断URL是否有效的解决办法
2013/04/27 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
2017/08/03 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
2019/05/08 PHP
JavaScript小技巧 2.5 则
2010/09/12 Javascript
对xmlHttp对象方法和属性的理解
2011/01/17 Javascript
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
jQuery插件uploadify实现ajax效果的图片上传
2016/06/18 Javascript
Node.js的特点详解
2017/02/03 Javascript
JS实现小球的弹性碰撞效果
2017/11/11 Javascript
express启用https使用小记
2019/05/21 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
2019/06/20 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
如何在 ant 的table中实现图片的渲染操作
2020/10/28 Javascript
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
shell命令行,一键创建 python 模板文件脚本方法
2018/03/20 Python
python:print格式化输出到文件的实例
2018/05/14 Python
Python实现微信机器人的方法
2019/09/06 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
pycharm通过ssh连接远程服务器教程
2020/02/12 Python
keras分类模型中的输入数据与标签的维度实例
2020/07/03 Python
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
2015/01/01 HTML / CSS
英国家喻户晓的高街品牌:River Island
2017/11/28 全球购物
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
培训讲师岗位职责
2014/04/13 职场文书
三八妇女节活动总结
2014/05/04 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
银行贷款收入证明
2014/10/17 职场文书
校本研修个人总结
2015/02/28 职场文书
外贸英文求职信范文
2015/03/19 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书