Доброго времени суток. Я стараюсь писать более гибкий код для того чтобы можно было его как можно больше переиспользовать без изменения. Если вам понадобится более гибкий вариант можете рассмотреть вот такой вариант для чисел(первое что пришло в голову):
Код: Выделить всё
function multiColumnSort(array, columns) {
return array.sort((a, b) => {
for (let col of columns) {
const absCol = Math.abs(col) - 1; // Преобразуем в индекс массива (0-based index)
const direction = col > 0 ? 1 : -1; // Определяем направление сортировки
if (a[absCol] < b[absCol]) {
return -1 * direction;
} else if (a[absCol] > b[absCol]) {
return 1 * direction;
}
}
return 0; // Если элементы равны по всем столбцам, возвращаем 0
});
}
В функцию multiColumnSort передается 2 аргумента:
1. array - многомерный массив,
2. columns - список номеров колонок по которым надо сортировать. Если номер положительный то сортировка по возрастанию, если отрицательный по убыванию.
Пример использования:
Код: Выделить всё
const data = [
[1, 5, 3],
[1, 2, 9],
[1, 5, 7],
[2, 2, 8]
];
const sortColumns = [1, -3]; // Сначала сортируем по 1 столбцу по возрастанию, затем по 3 столбцу по убыванию
const sortedData = multiColumnSort(data, sortColumns);
console.log(sortedData);