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 触发HTML元素绑定的函数
Sep 11 Javascript
Javascript 类型转换方法
Oct 24 Javascript
extjs中form与grid交互数据(record)的方法
Aug 29 Javascript
jquery分页插件jpaginate在IE中不兼容问题
Apr 22 Javascript
jquery图片滚动放大代码分享(2)
Aug 28 Javascript
jQuery Validate表单验证深入学习
Dec 18 Javascript
Js利用Canvas实现图片压缩功能
Sep 13 Javascript
JavaScript简单实现合并两个Json对象的方法示例
Oct 16 Javascript
Bootstrap Table实现定时刷新数据的方法
Aug 13 Javascript
微信小程序实现日历效果
Dec 28 Javascript
vue中npm包全局安装和局部安装过程
Sep 03 Javascript
请求时token过期自动刷新token操作
Sep 11 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学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
PHP如何搭建百度Ueditor富文本编辑器
2018/09/21 PHP
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
jQuery 的全选(全非选)即取得被选中的值使用介绍
2013/11/12 Javascript
JQuery解析XML的方法小结
2016/04/02 Javascript
轻松实现js选项卡切换效果
2016/09/24 Javascript
JavaScript简单实现合并两个Json对象的方法示例
2017/10/16 Javascript
微信小程序使用modal组件弹出对话框功能示例
2017/11/29 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
webpack4.x开发环境配置详解
2018/08/04 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
2019/11/04 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
2020/04/10 Javascript
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
在Django的form中使用CSS进行设计的方法
2015/07/18 Python
使用Python脚本将文字转换为图片的实例分享
2015/08/29 Python
Python科学画图代码分享
2017/11/29 Python
python清除函数占用的内存方法
2018/06/25 Python
Python3安装psycopy2以及遇到问题解决方法
2019/07/03 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
2019/08/05 Python
详解pycharm2020.1.1专业版安装指南(推荐)
2020/08/07 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
html5使用window.postMessage进行跨域实现数据交互的一次实战
2021/02/24 HTML / CSS
Bowflex美国官方网站:高级家庭健身器材
2017/12/22 全球购物
世界上最大的在线汽车租赁预订平台:Rentalcars.com(支持中文)
2018/10/12 全球购物
Derek Rose官网:英国高档睡衣、家居服和内衣品牌
2020/01/18 全球购物
.NET初级开发工程师面试题
2014/04/18 面试题
大学生的四年学习自我评价
2013/12/13 职场文书
餐厅经理岗位职责和岗位目标
2014/02/13 职场文书
行政助理的岗位职责
2014/02/18 职场文书
质量保证书格式模板
2015/02/27 职场文书
2015年暑期社会实践报告
2015/07/13 职场文书
导游词之介休绵山
2019/12/31 职场文书
uniapp开发小程序的经验总结
2021/04/08 Javascript