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 设置某DIV区域内的checkbox复选框
Nov 30 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
Feb 27 Javascript
JS辨别访问浏览器判断是android还是ios系统
Aug 19 Javascript
jQuery实现自动滚动到页面顶端的方法
May 22 Javascript
js实现网页多级级联菜单代码
Aug 20 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
Apr 20 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
Sep 05 Javascript
JavaScript学习笔记--常用的互动方法
Dec 07 Javascript
jquery表单提交带错误信息提示效果
Mar 09 Javascript
浅谈对Angular中的生命周期钩子的理解
Jul 31 Javascript
JS中原始值和引用值的储存方式示例详解
Mar 23 Javascript
Webpack 4.x搭建react开发环境的方法步骤
Aug 15 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
推荐一篇入门级的Class文章
2007/03/19 PHP
PHP获取时间排除周六、周日的两个方法
2014/06/30 PHP
JavaScript基本对象
2007/01/11 Javascript
javascript判断单选框或复选框是否选中方法集锦
2007/04/04 Javascript
JavaScript 布尔操作符解析  &amp;&amp; || !
2012/08/10 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
JQuery中dataGrid设置行的高度示例代码
2014/01/03 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
2014/02/08 Javascript
把jQuery的类、插件封装成seajs的模块的方法
2014/03/12 Javascript
JS实现支持多选的遍历下拉列表代码
2015/08/20 Javascript
js纯数字逐一停止显示效果的实现代码
2016/03/16 Javascript
jQuery中text() val()和html()的区别实例详解
2016/06/28 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
学习使用Bootstrap页面排版样式
2017/05/11 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
关于vue面试题汇总
2018/03/20 Javascript
JavaScript实现简单动态进度条效果
2018/04/06 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
layer弹出层自定义提交取消按钮的例子
2019/09/10 Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
2019/09/23 Javascript
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
2019/11/09 Javascript
vue 子组件和父组件传值的示例
2020/09/11 Javascript
Django中的CACHE_BACKEND参数和站点级Cache设置
2015/07/23 Python
python编程开发之类型转换convert实例分析
2015/11/13 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
Django密码系统实现过程详解
2019/07/19 Python
python 利用百度API识别图片文字(多线程版)
2020/12/14 Python
Tommy Hilfiger美国官网:美国高端休闲领导品牌
2019/01/14 全球购物
日本乐天德国站:Rakuten.de
2019/05/16 全球购物
linux系统都有哪些运行级别
2012/04/15 面试题
俄语翻译实习生的自我评价分享
2013/11/06 职场文书
体育之星事迹材料
2014/05/11 职场文书
大气污染防治方案
2014/05/19 职场文书
免职证明样本
2014/10/23 职场文书
MySQL 数据库 增删查改、克隆、外键 等操作
2022/05/11 MySQL