javascript(nodejs)二维数组排序
/**
* 二维数组排序
* @param arr [{a: 1, b: 1, c: 1}]
* @param fields 单字段排序:['a', 'desc'];多字段排序:[['a', 'asc'], ['b', 'desc']]
* 排序字段只能是数值型
* @returns {*[]}
*/
arraySort(arr = [], fields = []) {
try {
if (arr.length === 0) return arr;
if (fields.length === 0) return arr;
if (typeof fields[0] == 'object') {
let fieldsLen = fields.length;
for (let i = 0; i < fieldsLen; i++) {
if (i > 0) {
arr.sort((x, y) => {
let isEqual = true;
for (let j = 1; j <= i; j++) {
if (x[fields[i - j][0]] !== y[fields[i - j][0]]) {
isEqual = false;
break;
}
}
if (isEqual) {
if (fields[i][1].toLowerCase() === 'asc') {
return x[fields[i][0]] - y[fields[i][0]];
} else if (fields[i][1].toLowerCase() === 'desc') {
return y[fields[i][0]] - x[fields[i][0]];
}
}
});
} else {
arr.sort((x, y) => {
if (fields[i][1].toLowerCase() === 'asc') {
return x[fields[i][0]] - y[fields[i][0]];
} else if (fields[i][1].toLowerCase() === 'desc') {
return y[fields[i][0]] - x[fields[i][0]];
}
});
}
}
} else {
arr.sort((x, y) => {
if (fields[1].toLowerCase() === 'asc') {
return x[fields[0]] - y[fields[0]];
} else if (fields[1].toLowerCase() === 'desc') {
return y[fields[0]] - x[fields[0]];
}
});
}
return arr;
} catch (e) {
return arr;
}
}