Просмотр полной версии : вопрос по методу sort
Скажите пожалуйста, можно ли как нибудь в функцию которую вызывает метод sort передать доп.аргументы? Например есть двумерный массив 10х10, мне нужну иметь сортировку по каждой колонке, неужели придется для каждой прописывать свою функцию?
function (a, b) {
return a[n] - b[n];
};
Как можно передать в функцию аргумент n?
Akalenik
11.04.2013, 23:14
Двумерный массив 10х10 - это обычный массив из 10 обычных массивов из 10 элементов. Переворачиваем массив (строки в колонки) - сортируем - переворачиваем обратно. Профит.
dastingo
11.04.2013, 23:15
может попробовать сортировать в цикле
var arr = [
[7, 6, 5],
[17, 16, 15],
];
var arrSorted = [];
for ( var i=0; i<arr.length; i++ ) {
arrSorted.push( arr[i].sort( compNums ) );
}
console.log( arrSorted );
function compNums( a, b ) {
return a - b;
}
может попробовать сортировать в цикле
Нет, в цикле не пойдет, тем более мне нужна сортировка по столбцу, а не по строке.
Двумерный массив 10х10 - это обычный массив из 10 обычных массивов из 10 элементов. Переворачиваем массив (строки в колонки) - сортируем - переворачиваем обратно. Профит.
Спасибо, велосипеды я писать умею, мне хотелось узнать можно ли передать как нибудь доп.аргумент в функцию, но похоже никак.
dastingo
11.04.2013, 23:33
тогда никак, compare ф-ия от двух аргументов..
тогда никак, compare ф-ия от двух аргументов..
Почему никак? Можно извернуться через свойства объекта, например так.
function compare (a, b) {
return a[compare.idColumn] - b[compare.idColumn];
};
compare.idColumn = 5; // сортируем по 5-му столбцу
array.sort(compare);
кто предложит решение по лучше?
nikita.mmf
12.04.2013, 00:20
function getComparator ( n ) {
return function ( a, b ) {
return a[ n ] - b[ n ]
}
}
arr.sort( getComparator( 1 ) )
function getComparator ( n ) {
return function ( a, b ) {
return a[ n ] - b[ n ]
}
}
arr.sort( getComparator( 1 ) )
красиво, мне нравится, возьму на вооружение.
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot