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 相关文章推荐
JQuery实现简单时尚快捷的气泡提示插件
Dec 20 Javascript
js自定义事件及事件交互原理概述(二)
Feb 01 Javascript
dreamweaver 8实现Jquery自动提示
Dec 04 Javascript
JavaScript中instanceof运算符的使用示例
Jun 08 Javascript
AngularJS基础 ng-srcset 指令简单示例
Aug 03 Javascript
利用JavaScript实现拖拽改变元素大小
Dec 14 Javascript
详解Angular5路由传值方式及其相关问题
Apr 28 Javascript
简化版的vue-router实现思路详解
Oct 19 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
Mar 02 Javascript
微信公众号平台接口开发 获取access_token过程解析
Aug 14 Javascript
Vue结合路由配置递归实现菜单栏功能
Jun 16 Javascript
vue-cli —— 如何局部修改Element样式
Oct 22 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实现文件上传二法
2006/10/09 PHP
ThinkPHP之import方法实例详解
2014/06/20 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
2018/10/12 PHP
Javascript----文件操作
2007/01/18 Javascript
自己的js工具 Cookie 封装
2009/08/21 Javascript
解决Extjs上传图片无法预览的解决方法
2012/03/22 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
Asp.Net alert弹出提示信息的几种方法总结
2014/01/29 Javascript
网页实时显示服务器时间和javscript自运行时钟
2014/06/09 Javascript
JavaScript截取字符串的2个函数介绍
2014/08/27 Javascript
jQuery中:hidden选择器用法实例
2014/12/30 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
JavaScript插件化开发教程 (四)
2015/01/27 Javascript
JavaScript实现添加及删除事件的方法小结
2015/08/04 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
2016/07/09 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
原生JS实现圆环拖拽效果
2017/04/07 Javascript
webpack4 处理SCSS的方法示例
2018/09/03 Javascript
mpvue 页面预加载新增preLoad生命周期的两种方式
2019/10/17 Javascript
微信小程序swiper左右扩展各显示一半代码实例
2019/12/05 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
[02:38]DOTA2亚洲邀请赛 IG战队巡礼
2015/02/03 DOTA
利用python微信库itchat实现微信自动回复功能
2017/05/18 Python
Django+Xadmin构建项目的方法步骤
2019/03/06 Python
使用TensorFlow直接获取处理MNIST数据方式
2020/02/10 Python
浅谈keras中的keras.utils.to_categorical用法
2020/07/02 Python
python Scrapy框架原理解析
2021/01/04 Python
美国体育用品商店:Paragon Sports
2017/10/08 全球购物
Europcar澳大利亚官网:全球汽车租赁领域的领导者
2019/03/24 全球购物
Jowissa官方网站:瑞士制造的手表,优雅简约的设计
2020/07/29 全球购物
入党积极分子思想汇报范文
2014/01/05 职场文书
有关九一八事变的演讲稿
2014/09/14 职场文书
图书馆义工感想
2015/08/07 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书
MySQL创建管理LIST分区
2022/04/13 MySQL