У меня есть 2D-массив, и я использую пользовательскую функцию сортировки для сортировки по столбцу. Моя структура код похож на этот:Как передать дополнительные аргументы для функции сортировки
function sortBy(array, primaryCol, secondaryCol) {
function compareNumber(a, b) {
if (a[primaryCol] == b[primaryCol]) {
return a[secondaryCol] - b[secondaryCol] ? -1 : 1;
}
return a[primaryCol] - b[primaryCol];
}
array.sort(compareNumber);
}
sortBy(colors, 3, 0);
Внутри функции compareNumber
я доступ к primaryCol
и secondaryCol
параметры функции sortBy
. Что я хочу сделать, это перемещение compareNumber
функция за пределами sortBy
. В этом случае код не будет работать, потому что compareNumber
не может получить доступ к primaryCol
и secondaryCol
. Также прохождение primaryCol
и secondaryCol
в compareNumber
Функция не приносит пользы, потому что я предполагаю, что она принимает только два аргумента.
function compareNumber(a, b, primaryCol, secondaryCol) {
if (a[primaryCol] == b[primaryCol]) {
return a[secondaryCol] < b[secondaryCol] ? -1 : 1;
}
return a[primaryCol] - b[primaryCol];
}
function sortBy(array, primaryCol, secondaryCol) {
array.sort(compareNumber, primaryCol, secondaryCol);
}
sortBy(colors, 3, 0);
Итак, есть ли способ, чтобы сделать эту работу, передать дополнительные аргументы для сортировки функции, кроме a
и b
?
Это, похоже, более применимо к моей проблеме, потому что количество столбцов не будет исправлено. Это будет изменяться. И присваивание массива 'this' кажется более простым. В противном случае мне придется передавать каждый столбец вручную. – akinuri