一、遇到的情况
需要对数组进行排序,按属性1,属性2,属性3。。。的优先级进行升序或降序
二、 解决方法
采用js中数据的sort排序方法,
const arr = [需要排序的数据内容]
arr.sort(this.compareType('属性名', '属性名1', '属性名2', '属性名3', '升序用up降序用down'))
//compareType是定义好的函数
自定义排序函数 compareType(目前仅实现4属性顺位排序,可自行删除或增加)
compareType(propertyName, propertyName1, propertyName2, propertyName3, str) {
if (str === 'down') {
// 降序的
return function(a, b) {
if (b[propertyName] === a[propertyName]) {
// 第一顺位相同时,找第2顺位
if (b[propertyName1] === a[propertyName1]) {
// 第二顺位相同时,找第3顺位
if (b[propertyName2] === a[propertyName2]) {
// 第三顺位相同时,找第4顺位
return b[propertyName3] - a[propertyName3]
} else {
return b[propertyName2] - a[propertyName2]
}
} else {
return b[propertyName1] - a[propertyName1]
}
} else {
return b[propertyName] - a[propertyName]
}
}
} else {
// 升序的
return function(b, a) {
if (b[propertyName] === a[propertyName]) {
// 第一顺位相同时,找第2顺位
if (b[propertyName1] === a[propertyName1]) {
// 第二顺位相同时,找第3顺位
if (b[propertyName2] === a[propertyName2]) {
// 第三顺位相同时,找第4顺位
return b[propertyName3] - a[propertyName3]
} else {
return b[propertyName2] - a[propertyName2]
}
} else {
return b[propertyName1] - a[propertyName1]
}
} else {
return b[propertyName] - a[propertyName]
}
}
}
}
ps: 偶尔更新一下,如有错误,还请指正