一般排序工作都是又后端同學(xué)做的桶至,但是偶爾后端資源緊張使也會由前端來完成离唬,按照一種屬性排序很簡單,直接用一個sort方法就解決了褪迟。兩個屬性的時候也可以用嵌套的實(shí)現(xiàn),但是多個屬性的呢答憔?
那就要用到遞歸啦味赃,下邊是多使多屬性排序的,根據(jù)不同的需求可以通過改變fields來實(shí)現(xiàn)攀唯。
/*
arr:需要進(jìn)行排序的數(shù)組
fields:說明按照數(shù)組的哪一項進(jìn)行排序
*/
objectSort:function(arr, fields) {
let checkOrder = (left, right, fields) => {
let field = fields.shift()
if (field === undefined) return 0;
if(field.method == 'asc' && field.type == 'zh'){
return left[field.key].localeCompare(right[field.key], 'zh-CN')
}else if(field.method == 'asc'){//升序
return left[field.key] === right[field.key] ? checkOrder(left, right, fields) : (left[field.key] < right[field.key] ? -1 : 1)
}else if(field.method == 'des'){
return left[field.key] === right[field.key] ? checkOrder(left, right, fields) : (left[field.key] > right[field.key] ? -1 : 1)
}
}
return arr.sort((left, right) => {
return checkOrder(left, right, JSON.parse(JSON.stringify(fields)))
})
},
//調(diào)用
let orderType = [{
key:'correct_count',//按照哪個字段進(jìn)行排序
method:'des' //標(biāo)明按照什么方法
},{
key:'spent',
method:'asc'
},{
key:'created_at',
method:'asc'
},{
key:'student_name',
type:'zh', //中文首字母排序
method:'asc'
}
]
objectSort(list,orderType)