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 数组实现一个类似ruby的迭代器
Oct 27 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
Sep 13 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
Mar 03 Javascript
javascript日期处理函数,性能优化批处理
Sep 06 Javascript
JavaScript体验异步更好的解决办法
Jan 08 Javascript
Vuex 入门教程
Jan 10 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
May 18 Javascript
使用element-ui table expand展开行实现手风琴效果
Mar 15 Javascript
Angular6使用forRoot() 注册单一实例服务问题
Aug 27 Javascript
Layui 解决表格异步调用后台分页的问题
Oct 26 Javascript
JavaScript This指向问题详解
Nov 25 Javascript
jQuery操作元素追加内容示例
Jan 10 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 基于文件头的文件类型验证类函数
2012/05/01 PHP
部署PHP项目应该注意的几点事项分享
2013/12/20 PHP
PHP中使用GD库创建圆形饼图的例子
2014/11/19 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
2017/06/17 PHP
PHP mkdir创建文件夹实现方法解析
2020/11/13 PHP
js 判断 enter 事件
2009/02/12 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
js控制容器隐藏出现防止样式变化的两种方法
2014/04/25 Javascript
JavaScript中使用document.write向页面输出内容实例
2014/10/16 Javascript
javascript变量声明实例分析
2015/04/25 Javascript
js比较日期大小的方法
2015/05/12 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
2015/12/13 Javascript
基于JavaScript代码实现自动生成表格
2016/06/15 Javascript
HTML的select控件美化
2017/03/27 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
Angular单元测试之事件触发的实现
2020/01/20 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
Vue实现手机计算器
2020/08/17 Javascript
[51:26]VP vs VG 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
python实现读取并显示图片的两种方法
2017/01/13 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
Python函数中参数是传递值还是引用详解
2019/07/02 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
python智联招聘爬虫并导入到excel代码实例
2019/09/09 Python
Python telnet登陆功能实现代码
2020/04/16 Python
python怎么判断素数
2020/07/01 Python
canvas 如何绘制线段的实现方法
2018/07/12 HTML / CSS
文明村创建实施方案
2014/03/27 职场文书
小学三年级学生评语
2014/04/22 职场文书
社区关爱留守儿童活动方案
2014/08/22 职场文书
2015教师节师德演讲稿
2015/03/19 职场文书
追悼会悼词大全
2015/06/23 职场文书
开学第一周总结
2015/07/16 职场文书
导游词之云南丽江古城
2019/09/17 职场文书