JavaScript sort数组排序方法和自我实现排序方法小结

 更新时间:2016年06月06日 14:47:36   作者:FungLeo  
这篇文章主要介绍了JavaScript sort数组排序方法和自我实现排序方法小结的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下

 前言

针对一个数组进行排序,一个很常见的需求.尤其在后端.当然,前端也是有这个需求的.

当然,数组排序,是有现成的方法的.就是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}));

运行结果如下:

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);
}

运行结果如下图所示

for循环数组排序结果

我的方法中的知识点

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数组排序方法和自我实现排序方法小结的全部内容,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对脚本之家网站的支持。

相关文章

  • js 点击按钮弹出另一页,选择值后,返回到当前页

    js 点击按钮弹出另一页,选择值后,返回到当前页

    js 点击按钮弹出另一页,选择值后,返回到当前页,其实主要用于cms系统中,相关文章的搜索,要在已上传目录中选择一些图片等。
    2010-05-05
  • js中的this的指向问题详解

    js中的this的指向问题详解

    这篇文章主要介绍了js中的this的指向问题以及相关知识点内容,需要的朋友们参考学习下。
    2019-08-08
  • 一文学习JavaScript 使用误区

    一文学习JavaScript 使用误区

    在 JavaScript 程序中如果你在 if 条件语句中使用赋值运算符的等号 (=) 将会产生一个错误结果, 正确的方法是使用比较运算符的两个等号 (==),这篇文章主要介绍了一文学习JavaScript 使用误区,需要的朋友可以参考下
    2023-02-02
  • JavaScript面向对象中接口实现方法详解

    JavaScript面向对象中接口实现方法详解

    这篇文章主要介绍了JavaScript面向对象中接口实现方法,结合实例形式分析了javascript面向对象接口的概念、实现方法及相关操作注意事项,需要的朋友可以参考下
    2019-07-07
  • 再次谈论Javascript中的this

    再次谈论Javascript中的this

    javascript中的this应用非常广泛,对js中this总是似是而非的感觉,今天小编豁然开朗,然后再次给大家谈论js中的this关键,感兴趣的朋友跟着小编一起看看吧
    2016-06-06
  • 纯javascript判断查询日期是否为有效日期

    纯javascript判断查询日期是否为有效日期

    很多网站都涉及到输入日期选项,如果客户日期输入错误,可能导入查询不到甚至查询到错误的信息,为了更好的满足用户需求,需要对日期进行校验,下面给大家介绍使用纯javascript如何判断查询日期是否为有效日期,需要的朋友可以参考下
    2015-08-08
  • JS快速掌握ES6的class用法

    JS快速掌握ES6的class用法

    这篇文章主要介绍了JS快速掌握ES6的class用法,想了解ES6的同学,一定要看一下
    2021-05-05
  • JavaScript数组的一些奇葩行为

    JavaScript数组的一些奇葩行为

    今天,复习了一下JavaScript的数组,然后,把他的一些奇葩行为总结了一下,分享在脚本之家平台,欢迎大家参考
    2016-01-01
  • 一篇文章教你写出干净的JavaScript代码

    一篇文章教你写出干净的JavaScript代码

    JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型,下面这篇文章主要给大家介绍了如何通过一篇文章教你写出干净的JavaScript代码,需要的朋友可以参考下
    2021-09-09
  • Svelte 和 React的比较详解(一)

    Svelte 和 React的比较详解(一)

    在这篇文章中,我将Svelte 还是 React作了对比,不能以个人意见代表谁好谁坏。以及我发现使用这两个框架的一些区别,感兴趣的小伙伴可以参考阅读
    2023-04-04

最新评论