美文网首页让前端飞Web前端之路
数组排序之优雅的compare函数

数组排序之优雅的compare函数

作者: 歇歇 | 来源:发表于2017-12-13 14:53 被阅读107次

JavaScript数组排序,默认支持两种:sort()排序和reverse()逆序。

reverse()

reverse()没什么好介绍的,就是把数组反转一下。

var arr = [2, 1, 3, 7, 12, 17]
arr.reverse() // [17, 12, 7, 3, 1, 2]

// 类似于
var arr = [2, 1, 3, 7, 12, 17]
var tmp = []
var len = arr.length
for (var i=0; i<len; i++) {
    tmp.push(arr.pop())
}
arr = tmp

sort() & 优雅的写compare函数

sort()有两个重点:

  • 排序方法比较的是字符串
  • 排序方法可以自定义compare函数

compare函数很重要,是sort()的精髓,因为它sort()才变得好用。它可以实现:降序排序、数字排序、数组元素为对象且以对象某字段排序...

// 比较的是字符串 --1--
var arr = [2, 1, 3, 7, 12, 17]
arr.sort() //[1, 12, 17, 2, 3, 7]

// 自定义compare函数
// 比较数字 - 以数据大小定顺序 --2--
var arr = [2, 1, 3, 7, 12, 17]
var compare = function(item1, item2) {
    if(Number(item1) < Number(item2)) { 
        return -1 // 升序排序-1,降序排序1
    } else if (Number(item1) > Number(item2)) {
        return 1 // 升序排序1,降序排序-1
    } else {
        return 0 // 相等返回0
    }
}
arr.sort(compare) //[1, 2, 3, 7, 12, 17]

// 数组元素为对象(sort()将无法排序),并以对象的某个属性排序 --3--
var arr = [
    {
        name: 'luwuer',
        age: '18'
    },
    {
        name: 'cc',
        age: '23'
    },
    {
        name: 'bili',
        age: '8'
    }
]
var compareContainer = function(attr) {
    // return的匿名函数才是compare函数喲
    return function(item1, item2) {
        var value1 = isNaN(Number(item1[attr]))? item1[attr]: Number(item1[attr])
        var value2 = isNaN(Number(item2[attr]))? item2[attr]: Number(item2[attr])
        if (value1 < value2) {
            return -1
        } else if (value1 > value2) {
            return 1
        } else {
            return 0
        }
    }
}
arr.sort(compareContainer('age')) // 试试结果咯

相关文章

  • 数组排序之优雅的compare函数

    JavaScript数组排序,默认支持两种:sort()排序和reverse()逆序。 reverse() rev...

  • js里关于Array.prototype.sort分析及日常使用

    介绍 对数组内容进行排序,可传入比较器定义排序规则 使用 arr.sort(compare) compare比较器...

  • iOS数组排序

    数组包含数字 使用s�ortedArrayUsingSelector进行排序时, compare:只是系统提供的一...

  • 比较函数compare

    javascript中数组的sort()方法原理研究 js中compare 函数,如果

  • 二维数组根据指定字段排序

    PHP自带的排序函数如下: sort() 函数用于对数组单元从低到高进行排序。 rsort() 函数用于对数组单元...

  • 数组相关处理函数2

    冒泡排序法 快速排序法 数组排序函数 ksort 对数组按照键名排序 krsort 键名降序排序 asort 对数...

  • 数组排序相关

    数组排序相关 结合sort和函数排序: 数组由小到大进行排序:sort,sortnum; vararr = [...

  • Array.sort

    数组排序函数,经常使用。(抱歉,我没用过,如果你不问,我是想不到排序用这个函数的 。工作中用到数组排序函数时,都是...

  • js 常用方法实例

    sort() 数组排序 (改变原数组) 参数为规定排序的比较函数(非必填) copyWithin() 数组的指定位...

  • 从小到大,从大到小,PHP 数组排序

    数组排序:数组中的元素能够以字母或数字顺序进行升序或降序排序。 PHP - 数组的排序函数 sort() - 以升...

网友评论

    本文标题:数组排序之优雅的compare函数

    本文链接:https://www.haomeiwen.com/subject/uqoaixtx.html