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中使用data()方法读取HTML5自定义属性data-*实例
Apr 11 Javascript
JavaScript实现找质数代码分享
Mar 24 Javascript
JS中获取函数调用链所有参数的方法
May 07 Javascript
JavaScript判断undefined类型的正确方法
Jun 30 Javascript
js跨域请求的5中解决方式
Jul 02 Javascript
Jquery 分页插件之Jquery Pagination
Aug 25 Javascript
javascript检查某个元素在数组中的索引值
Mar 30 Javascript
详解Webpack + ES6 最新环境搭建与配置
Jun 04 Javascript
详解Vue.js自定义tipOnce指令用法实例
Dec 19 Javascript
详解如何给React-Router添加路由页面切换时的过渡动画
Apr 25 Javascript
vue webpack重写cookie路径的方法
Jul 10 Javascript
JavaScript对象原型链原理详解
Feb 05 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公用函数列表[正则]
2007/02/22 PHP
php header()函数使用说明
2008/07/10 PHP
php数组函数序列之array_search()- 按元素值返回键名
2011/11/04 PHP
PHP内核探索:变量概述
2014/01/30 PHP
codeigniter中测试通过的分页类示例
2014/04/17 PHP
PHP远程调试之XDEBUG
2015/12/29 PHP
PHP实现查询两个数组中不同元素的方法
2016/02/23 PHP
php注册和登录界面的实现案例(推荐)
2016/10/24 PHP
fckeditor粘贴Word时弹出窗口取消的方法
2014/10/30 Javascript
javascript日期格式化方法汇总
2015/10/04 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
2015/12/10 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
2017/01/04 Javascript
详解Sea.js中Module.exports和exports的区别
2017/02/12 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
2018/10/08 Javascript
深入理解es6块级作用域的使用
2019/03/28 Javascript
微信小程序中data-key属性之数据传输(经验总结)
2020/08/22 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
2020/08/31 Javascript
[05:53]完美世界携手游戏风云打造 卡尔工作室观战系统篇
2013/04/22 DOTA
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
用Python的Django框架完成视频处理任务的教程
2015/04/02 Python
Python正则表达式知识汇总
2017/09/22 Python
在双python下设置python3为默认的方法
2018/10/31 Python
Python单元测试unittest的具体使用示例
2018/12/17 Python
python面试题Python2.x和Python3.x的区别
2019/05/28 Python
python跳出双层for循环的解决方法
2019/06/24 Python
浅谈python 中类属性共享的问题
2019/07/02 Python
详解Python打包分发工具setuptools
2019/08/05 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
品牌推广活动策划方案
2014/08/19 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
交心谈心活动总结
2015/05/11 职场文书
离婚上诉状范文
2015/05/23 职场文书
阿甘正传观后感
2015/06/01 职场文书