首先先看看对于普通的数组排序的方法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、如果对字符串进行排序是把字符串拆分后,从第一个开始比较
|