js:数组自定义排序

标签: javascript自定义数组排序
8人阅读 评论(0) 收藏 举报
分类:

写在前面:没想到我的一篇对IDE评论的文章,得到了十几条评论,真是惭愧。写的具体编程知识点的文章,倒是鲜有评论。~ 23333


数组中已经存在两个可以直接用来重排序的方法:reverse()sort()

reverse()方法用于反转数组。
默认情况下,sort()方法按升序排列数组项–即最小值在最前面,最大值在最后面。为了实现排序,sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,以确定如何排序。即使数组的每一项都是数值,sort()方法比较的也是字符串

var values = [0 ,1 , 5, 10 ,15];
values.sort();

console.log(values); // 0,1,10,15,5

sort()方法可以接受一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面

比较函数接受两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个参数之后则返回一个正数。如下所示:


var stu1 = {
    name: "python", age: 80, grade: 99,
    toString: function () {
        return this.name + " , " + this.age + " , " + this.grade;
    }
};
var stu2 = {
    name: "javascript", age: 30, grade: 88, toString: function () {
        return this.name + " , " + this.age + " , " + this.grade;
    }
};
var stu3 = {
    name: "php", age: 18, grade: 59, toString: function () {
        return this.name + " , " + this.age + " , " + this.grade;
    }
};
var stu4 = {
    name: "vb", age: 50, grade: 70, toString: function () {
        return this.name + " , " + this.age + " , " + this.grade;
    }
};
var stu5 = {
    name: "shell", age: 60, grade: 70, toString: function () {
        return this.name + " , " + this.age + " , " + this.grade;
    }
};
var stu6 = {
    name: "java", age: 40, grade: 99, toString: function () {
        return this.name + " , " + this.age + " , " + this.grade;
    }
};

var langArr = [stu1, stu2, stu3, stu4, stu5, stu6];

console.log("排序前:" + langArr);
console.log("-------------------");


function compare(a, b) {
    if (a.grade > b.grade) {
        return -5;
    } else if (a.grade === b.grade) {
        return 0;
    } else {
        return 5;
    }
} // todo:简单排序,仅仅通过分数进行排序

function cmp(a, b) {

    if (a.grade > b.grade) {
        return -5;
    } else if (a.grade === b.grade) {
        // return 0;
        if (a.age < b.age) {
            return -4;
        } else if (a.age === b.age) {
            return a.name.localeCompare(b.name);
        } else {
            return 4;
        }
    } else {
        return 5;
    }
} // todo:复杂排序,先比较分数,然后是年龄,最后是名字字符串

// langArr.sort(compare);
langArr.sort(cmp);

console.log("排序后:" + langArr);

输出显示:

排序前:python , 80 , 99,javascript , 30 , 88,php , 18 , 59,vb , 50 , 70,shell , 60 , 70,java , 40 , 99
-------------------
排序后:java , 40 , 99,python , 80 , 99,javascript , 30 , 88,vb , 50 , 70,shell , 60 , 70,php , 18 , 59

从输出结果可以看到,的确如我们预期:先比较分数,然后是年龄,最后是名字字符串


写在后面:对于javascript,我之前放弃了N次,现在又想拾起,所以开始看这相关的资料了。~

查看评论

浅谈JavaScript--Array数组sort()排序方法与自定义比较器的使用

数组的排序的重要性不必多说,到处可见,现在来说说sort()方法的使用与自定义比较器 sort()方法:默认将数组中的所有元素转为字符串后再排列(默认是升序),用来排列字符串类型的元素 ...
  • baidu_25343343
  • baidu_25343343
  • 2017-02-11 14:22:44
  • 1272

JavaScript自定义数组排序

Array中有自带的排序功能,这个使用起来比较方便,我们有一点必须清楚,就是排序的依据,如果sort不传入参数的话,那就是按照字符编码(Unicode编码)的顺序排序。...
  • qinshenxue
  • qinshenxue
  • 2014-03-11 14:41:52
  • 2228

PHP自定义数组排序

/* * 二维数组自定义排序函数 * uasort($arr,function_name) * **/ $arr = array( array('a'=>1,'b'=>'c'), array...
  • wujiangwei567
  • wujiangwei567
  • 2014-12-07 21:12:54
  • 1863

js 数组 自定义排序

js 按照某字段排序方法
  • yang_bliss
  • yang_bliss
  • 2017-10-12 10:00:41
  • 76

php自定义对二维数组进行排序

在做ecshop开发时。经常对二维数组进行排序,但是自己写想了半天也没写出来,实际上我以为api有这个功能,所以我一直在寻找api,并没有真正动脑去写 在网上查了一下。便把它的转过来了,方便今后自己...
  • u011691759
  • u011691759
  • 2013-12-25 16:11:50
  • 766

一款用于表格数据自定义排序的jQuery插件jquery.tablesortable.js(附例子)

  • 2016年12月13日 11:06
  • 13.57MB
  • 下载

java中如何实现自定义排序

解题中经常用到自定义排序,把这篇文章放到这里备用。 当需要排序的集合或数组不是单纯的数字型时,通常要用到两个接口Comparator或Comparable,以简单的方式实现对象排序或自定义排序...
  • dahe5
  • dahe5
  • 2013-02-26 20:13:28
  • 443

Java自定义对象数组、集合排序

//实体类: package CategoryDp2; import java.util.Comparator; public class Cat implements Comp...
  • u011921490
  • u011921490
  • 2015-01-18 14:41:37
  • 1398

scala数组,自定义类型,自定义排序等

定义数组: val active = Array.fill(numRuns)(true) val costs = Array.fill(numRuns)(0.0) var ac...
  • zhangweijiqn
  • zhangweijiqn
  • 2016-11-17 15:28:14
  • 1322
    个人资料
    持之以恒
    等级:
    访问量: 19万+
    积分: 3851
    排名: 1万+
    最新评论