Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   вопрос по методу sort (https://javascript.ru/forum/misc/37228-vopros-po-metodu-sort.html)

simple 11.04.2013 22:49

вопрос по методу 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;
   }

simple 11.04.2013 23:23

Цитата:

Сообщение от dastingo (Сообщение 245687)
может попробовать сортировать в цикле

Нет, в цикле не пойдет, тем более мне нужна сортировка по столбцу, а не по строке.

simple 11.04.2013 23:27

Цитата:

Сообщение от Akalenik (Сообщение 245686)
Двумерный массив 10х10 - это обычный массив из 10 обычных массивов из 10 элементов. Переворачиваем массив (строки в колонки) - сортируем - переворачиваем обратно. Профит.

Спасибо, велосипеды я писать умею, мне хотелось узнать можно ли передать как нибудь доп.аргумент в функцию, но похоже никак.

dastingo 11.04.2013 23:33

тогда никак, compare ф-ия от двух аргументов..

simple 12.04.2013 00:16

Цитата:

Сообщение от dastingo (Сообщение 245693)
тогда никак, 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 ) )

simple 12.04.2013 00:25

Цитата:

Сообщение от nikita.mmf (Сообщение 245704)
function getComparator ( n ) { 
  return function ( a, b ) {
    return a[ n ] - b[ n ]
  }
}
arr.sort( getComparator( 1 ) )

красиво, мне нравится, возьму на вооружение.


Часовой пояс GMT +3, время: 10:30.