仰望蓝天De蛙

导航

个人对sort()排序方法中比较函数一直很混乱,今日理清

需求:使用随机数来打印出0-10,并排序。

代码:

var a = new Array();
var
testArray = function() { while (1) { var b = parseInt(Math.random() * 11); if (a.indexOf(b) === -1) { a.push(b); } if (a.length >= 11) { break; } } a.sort(function(a, b) { return a - b; }); console.log(a); } testArray();

结果:

关于sort()方法,当不传入任何参数时,会按照字母表中的顺序进行排序

如:

var a = new Array();
var testArray = function() {
    while (1) {
        var b = parseInt(Math.random() * 11);
        if (a.indexOf(b) === -1) {
            a.push(b);
        }
        if (a.length >= 11) {
            break;
        }
    }
    a.sort();
    console.log(a);
}
testArray();

结果:

所以使用sort()时,应当传入比较函数,比较函数可以有两个参数a,b,当两数相减,结果<0,则第一个参数放在前,反之在后,依次排序,如:参数顺序为a,b,若a-b<0,则a在前b在后,而比较函数为b-a时,b-a<0,第一个参数在前,即a在前(但此时a比b大,即从大到小的排序)。由于鄙人悟性低,理解能力差,表达能力也差,在看书时被绕了好久,此时说也说不清,于是举以下例子:

1.从小到大排序(以下代码为比较函数中的内容)

function(a,b){
  return a-b;
}

function(1,3){
  return 1-3;
}

当传入1,3时,1-3<0,所以第一个参数'a'在前,顺序即[1,3]。

2.从小到大排序

function(a,b){
  return a-b;  
}

function(3,1){
  return 3-1;
}

此时按3,1的顺序传入,3-1大于0,所以第一个参数'a'在后,顺序为[1,3]。

3.从大到小排序

function(a,b){
  return b-a;
}

function(1,3){
  return 3-1;
}

此时按1,3的顺序传入,3-1大于0,所以第一个参数'a'在后,顺序为[3,1]。

4.从大到小排序

function(a,b){
return b-a;
}

function(3,1){
return 1-3;
}

(为啥不能上传代码了。。。)

此时按3,1的顺序传入,1-3小于0,所以第一个参数'a'在前,顺序即[3,1]。

 

 

总结:前端技术日新月异,作为初学者的我,在关注技术动态的时候,当时刻不忘基础知识,时时巩固。

posted on 2016-11-22 12:10  仰望蓝天De蛙  阅读(155)  评论(0编辑  收藏  举报