排序测试结果
排序函数
/**
* 适合各个key自定义升降的情景
* @param arr 数据源
* @param keys 排序的key
* @param isAscend 默认为全升序(1为升序,0为降序
* @returns //逆降 顺升
*/
public static SortByKeys(arr: any[], keys: string[], isAscend?: number[]): void {
let keyLen = keys.length;
if (keyLen <= 0) {
console.error("keys' length is zero.")
return;
}
if (!isAscend) {
for (let i: number = 0; i < keyLen; i++) {
isAscend.push(1);
}
}
if (keyLen != isAscend.length) {
console.error("keys' length != isAscend's length.");
return;
}
arr.sort((a: any, b: any) => {
for (let idxer: number = 0; idxer < keys.length; idxer++) {
let key = keys[idxer];
let aK2V = a[`${key}`];
let bK2V = b[`${key}`];
if (aK2V === bK2V) {
continue;
} else {
let isAsc = isAscend[idxer];
return isAsc ? (aK2V - bK2V) : (bK2V - aK2V);
}
}
return 0;
});
}
测试数据
public static test(): void {
//排序优先级:sex升序
// \ age降序
// \ class降序
// \ height升序
/**数据源 */
let arr = [
{
sex: 1, //1男2女
age: 18,
class: 3, //班级
height: 160,
},
{
sex: 2, //1男2女
age: 18,
class: 2, //班级
height: 160,
},
{
sex: 1, //1男2女
age: 18,
class: 3, //班级
height: 160,
},
{
sex: 2, //1男2女
age: 20,
class: 1, //班级
height: 165,
},
{
sex: 1, //1男2女
age: 23,
class: 1, //班级
height: 166,
},
{
sex: 2, //1男2女
age: 20,
class: 2, //班级
height: 180,
},
{
sex: 2, //1男2女
age: 20,
class: 3, //班级
height: 170,
},
{
sex: 2, //1男2女
age: 20,
class: 2, //班级
height: 170,
},
{
sex: 2, //1男2女
age: 15,
class: 2, //班级
height: 170,
},
];
console.log("=====================");
for (let k in arr) {
console.log(arr[k]);
}
console.log("排序后----[升序]---[降序]----[降序]---[升序]----");
SortUtil.SortByKeys(arr, ['sex', "age", "class", "height"], [1, 0, 0, 1]);
console.log(arr);
console.log("=====================");
}