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 document.images实例
May 27 Javascript
javascript 触发HTML元素绑定的函数
Sep 11 Javascript
js给页面加style无效果的解决方法
Jan 20 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
Mar 17 Javascript
Javascript 高阶函数使用介绍
Jun 15 Javascript
使用BootStrap实现用户登录界面UI
Aug 10 Javascript
基于JavaScript实现随机颜色输入框
Dec 10 Javascript
Iscrool下拉刷新功能实现方法(推荐)
Jun 26 Javascript
React根据宽度自适应高度的示例代码
Oct 11 Javascript
JS实现验证码倒计时的注册页面
Jan 02 Javascript
详解node和ES6的模块导出与导入
Feb 19 Javascript
js实现小时钟效果
Mar 25 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
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
javascript类型系统——undefined和null全面了解
2016/07/13 Javascript
jQuery实现为LI列表前3行设置样式的方法【2种方法】
2016/09/04 Javascript
基于Javascript实现的不重复ID的生成器
2016/12/25 Javascript
angularjs+bootstrap菜单的使用示例代码
2017/03/07 Javascript
javascript 面向对象实战思想分享
2017/09/07 Javascript
详解JS函数stack size计算方法
2018/06/18 Javascript
微信小程序HTTP接口请求封装的实现
2019/02/21 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
2019/04/19 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
Vue.js 中的实用工具方法【推荐】
2019/07/04 Javascript
Vue仿微信app页面跳转动画效果
2019/08/21 Javascript
Vue使用mixin分发组件的可复用功能
2019/09/01 Javascript
详解JavaScript中精度失准问题及解决方法
2020/02/04 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
[01:00:54]TI4正赛第二日开场
2014/07/20 DOTA
[47:20]DAC2018 4.4 淘汰赛 Optic vs Mineski 第一场
2018/04/05 DOTA
Python实现检测服务器是否可以ping通的2种方法
2015/01/01 Python
Python网络编程详解
2017/10/31 Python
详解安装mitmproxy以及遇到的坑和简单用法
2019/01/21 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
Tensorflow 多线程与多进程数据加载实例
2020/02/05 Python
亲子拓展活动方案
2014/02/20 职场文书
小班下学期评语
2014/05/04 职场文书
2014物价局群众路线对照检查材料思想汇报
2014/09/21 职场文书
元宵节寄语大全
2015/02/27 职场文书
2015年煤矿安全工作总结
2015/05/23 职场文书
少年犯观后感
2015/06/11 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
2019奶茶店创业计划书范本,值得你借鉴
2019/08/14 职场文书
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸
python实现双向链表原理
2022/05/25 Python