关闭

javascript 数组排序sort方法和自我实现排序方法的学习小结 by FungLeo

标签: javascript数组排序sort排序for排序数组复制
8359人阅读 评论(7) 收藏 举报
分类:

前言

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

当然,数组排序,是有现成的方法的.就是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。
    1. 复制数组的方法(一)var arrOld = arr.concat(); ,原理:concat()函数是用于拼接多个数组的函数,这种写法相当于拼接自己.也就是复制了.
    2. 复制数组的方法(二)var arrOld = arr.slice(0) , 原理:slice()函数是一个截取数组的函数,设置值为0,则是全部截取,相当于复制了.
  3. splice()方法用于插入、删除或替换数组的元素。这里是使用了其删除数组中指定位置的特性.
  4. 我的方法和sort方法的差异.
    1. 我的方法没有修改原数组,而sort是在原数组的基础上进行的修改.
    2. 我的方法返回的是一个新数组,原数组并没有消失或者改变.(好像和上面一句是一个意思….)
  5. 排序是编程中非常非常基础并且非常非常重要的知识点.sort排序在执行大量数据的情况下,效率还是比较低的.当然,我的方法的效率也是很低的.

本文由FungLeo原创,允许转载.但转载必须署名作者,并保留文章首发链接.否则将追究法律责任.
首发地址:http://blog.csdn.net/FungLeo/article/details/51555590

1
0
查看评论

js中数组的排序

[javascript] view plain copy console.log("------默认排序(ASCII字符排序)------");  var arr = [1,2,55,12,88];  ...
  • salonzhou
  • salonzhou
  • 2016-03-04 12:42
  • 3539

js中数组的排序

console.log("------默认排序(ASCII字符排序)------"); var arr = [1,2,55,12,88]; arr.sort(); //ASCII字符代码从小到大排序 console.log(arr.toString()); cons...
  • zb0567
  • zb0567
  • 2014-03-12 11:40
  • 6547

深入探讨JS中的数组排序函数sort()和reverse()

最近在研究Javascript发现了其中一些比较灵异的事情。有点让人感到无语比如:   alert(typeof( NaN == NaN));//结果为假。   alert(typeof( NaN != NaN));//结果为真。   嘿嘿,当然这个不是这篇文章要讨论的!!开始我们...
  • woaijianjiandandande
  • woaijianjiandandande
  • 2016-10-26 16:48
  • 4946

js正则实现前端搜索,匹配字符加红

一、介于公司需要,要开发一个比较简易的笔记本功能,里面要实现按照标题搜索,显示匹配项目,并在匹配项的字符加红显示,中间有空格的可以匹配任何字符。 二、具体的直接看源码吧,这里只是实现一下功能,就没有怎么注意代码的封装 搜索数据,显示符合条件的内容,并显示出...
  • wzgdjm
  • wzgdjm
  • 2016-06-27 15:48
  • 2871

js实现两种实用的排序算法——冒泡、快速排序

分享记录两种程序员必备的排序算法:冒泡算法、排序算法,面试日常,很实用!
  • Loving_M
  • Loving_M
  • 2016-11-01 10:29
  • 23142

JS数组的冒泡排序法

day5.5                                /* ...
  • CharlesK6
  • CharlesK6
  • 2017-04-09 21:38
  • 640

[码海拾贝 之JS] JS 之数组排序

针对这个方法, 需要特别注意的是: 1.数组调用sort方法后,会影响本身(而非生成新数组) 2.sort()方法默认是按字符来排序的,所以在对数字型数组排序时,不可想当然的以为会按数字大小排序!
  • oscar999
  • oscar999
  • 2014-07-01 18:09
  • 4479

javascript 对象数组排序

javascript 对象数组排序 作者: admin 日期: 二月 13, 2011发表评论 (3)查看评论 javascript实现多维数组、对象数组排序,其实用的就是原生的sort()方法,用于对数组的元素进行排序。 其基本的用法...
  • kavensu
  • kavensu
  • 2014-01-04 21:55
  • 16481

js数组去重与排序

//1.关于数组去重 // 常见用法:循环两次数组,第二次循环与第一次循环的值比较,当两次循环的值相等时,不加入到数组中,其余不等添加到新数组中。 // 代码如下; function delRepeat(arr){    var box = [];//存放去重数据  f...
  • qq_29849641
  • qq_29849641
  • 2017-02-12 15:41
  • 550

javascript中数组排序方法sort()用法

对于一个数组的排序,默认的sort()按字符编码排序的:     var testArray=[3,324,5345,6546,134,5654,665];     testArray.sort()...
  • ren_qin
  • ren_qin
  • 2015-03-11 11:00
  • 1077
    个人资料
    • 访问:1223791次
    • 积分:12788
    • 等级:
    • 排名:第1297名
    • 原创:214篇
    • 转载:39篇
    • 译文:1篇
    • 评论:930条
    站内搜索
    博客专栏
    文章分类
    友情链接
    最新评论