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 相关文章推荐
超酷的网页音乐播放器DewPlayer使用方法
Dec 18 Javascript
基于jquery的无限级联下拉框js插件
Oct 29 Javascript
有关于eclipse配置spket需要注意的一些地方
Apr 07 Javascript
利用jQuery实现可以编辑的表格
May 26 Javascript
js在指定位置增加节点函数insertBefore()用法实例
Jan 12 Javascript
jQuery实现弹出窗口中切换登录与注册表单
Jun 05 Javascript
jquery插件unobtrusive实现片段式加载
Jun 15 Javascript
JavaScript对象参数的引用传递
Jan 14 Javascript
JavaScript代码里的判断小结
Aug 22 Javascript
JS 60秒后重新发送验证码的实例讲解
Jul 26 Javascript
vue移动端路由切换实例分析
May 14 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
Aug 17 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 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
2009/01/30 PHP
PHP开发负载均衡指南
2010/07/17 PHP
php四种基础算法代码实例
2013/10/29 PHP
PHP基于数组实现的分页函数实例
2014/08/20 PHP
PHP strtotime函数用法、实现原理和源码分析
2015/02/04 PHP
php搜索文件程序分享
2015/10/30 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
javascript中的107个基础知识收集整理 推荐
2010/03/29 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
jQuery学习笔记之jQuery原型属性和方法
2014/06/09 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
一个炫酷的Bootstrap导航菜单
2016/12/28 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
浅谈vue.watch的触发条件是什么
2020/11/07 Javascript
vue中watch的用法汇总
2020/12/28 Vue.js
JS中箭头函数与this的写法和理解
2021/01/14 Javascript
在Python中使用base64模块处理字符编码的教程
2015/04/28 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
2017/04/21 Python
python文件名和文件路径操作实例
2017/09/29 Python
Django错误:TypeError at / 'bool' object is not callable解决
2019/08/16 Python
详解Python3定时器任务代码
2019/09/23 Python
使用Python的turtle模块画国旗
2019/09/24 Python
Python实现CNN的多通道输入实例
2020/01/17 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
纯CSS3实现滚动的齿轮动画效果
2014/06/05 HTML / CSS
商务英语大学生职业生涯规划书范文
2014/01/01 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
房屋分割离婚协议书范本
2014/12/01 职场文书
辞职信格式模板
2015/02/27 职场文书
公文写作:新员工转正申请书范本3篇!
2019/08/07 职场文书
如何在向量化NumPy数组上进行移动窗口
2021/05/18 Python
Python数据可视化之绘制柱状图和条形图
2021/05/25 Python
详解TypeScript的基础类型
2022/02/18 Javascript