A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

首先先看看对于普通的数组排序的方法sort
作用:对数组里的元素进行排序(默认一ASCII码来排列的)
参数:function(a,b) {return a-b}
是否改变原数组:改变
返回值:排序后的数组
[AppleScript] 纯文本查看 复制代码
let arr = [2, 3, 6, 9, 3, 1, 7, 2, 4, 5, 8]
arr.sort(
    function(a,b) {
        return a - b
    }
)
console.log(arr) // [1, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9]
那么对于数组里包含对象的数组该如何排序呢?
[AppleScript] 纯文本查看 复制代码
let arr = [
    {
        id: '1',
        date: '2019-01-02',
        age: 26,
        isDelete: false
    },
    {
        id: '2',
        date: '2019-01-01',
        age: 23,
        isDelete: true
    },
    {
        id: '3',
        date: '2019-01-06',
        age: 25,
        isDelete: true
    },
    {
        id: '4',
        date: '2019-01-03',
        age: 21,
        isDelete: false
    }
]
function obj_sort(item1, item2) {
    let item3 = {}
    for (let i = 2; i < arguments.length; i++) {
        item3 = arguments[i]
    }
    if (Object.keys(item3).length === 0) {
        for (let key in item1) {
            if (item1[key] > item2[key]) {
                return 1
            } else if (item1[key] < item2[key]) {
                return -1
            }
        }
        return 0
    } else {
        for (let key in item3) {
            let orderBy = item3[key]
            if (orderBy === "ascending") {
                if (item1[key] > item2[key]) {
                    return 1
                } else if (item1[key] < item2[key]) {
                    return -1
                }
            } else if (orderBy === "descending") {
                if (item1[key] > item2[key]) {
                    return -1
                } else if (item1[key] < item2[key]) {
                    return 1
                }
            }
        }
        return 0
    }
}
function sortObjectbyArray(arr, filter) {
    return arr.sort(function (a, b) {
        return obj_sort(a, b, filter)
    })
}
// 对日期进行升序排序
let arrDateAsc = sortObjectbyArray(arr, {"date":"ascending"}) 
console.log(arrDateAsc)//结果是按照arr中对象中date属性升序进行排序

// 对日期进行降序排序
let arrDateDes = sortObjectbyArray(arr, {"date":"descending"})
console.log(arrDateDes)//结果是按照arr中对象中date属性降序进行排序

// 对isDelete布尔类型进行先true后false排序
let arrDeleteAsc = sortObjectbyArray(arr, {"isDelete":"ascending"}) 
console.log(arrDeleteAsc)//结果是按照arr中对象中isDelete属性升序进行排序(先排true再排false)

// 对年龄进行升序排序
let arrAgeAsc = sortObjectbyArray(arr, {"age":"ascending"}) 
console.log(arrAgeAsc)//结果是按照arr中对象中age属性升序进行排序
这个还可以先对年龄排序,然后再对日期排序方法是:直接在对象里加上属性即可
ps:let arrDeleteAsc = sortObjectbyArray(arr, {"age":"ascending","date":"ascending"}) **提醒:1、如果在数组的对象中存在没有要排序的属性此方法是不可用的2、如果对字符串进行排序是把字符串拆分后,从第一个开始比较



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马