Как упорядочивать массив 2D из-за нескольких колонн в Javascript?

На прошлой неделе, а именно, 13 февраля 2017, я задал вопрос.

Как упорядочивать двухмерный массив из-за колонн в Javascript?

Но это функционирует, чтобы упорядочивать единственную колонну. Когда два элемента колонны, которые нужно упорядочивать, - равны, он был бы должен мочь упорядочивать из-за другой колонны этот сектор, но он это не делает.

Массив, который я хочу упорядочить, - следующий:

var matriz = [
//Columnas:    0 1 2 3 4
/*Filas:  0*/ [9,5,3,2,7],
/*        1*/ [7,9,5,4,3],
/*        2*/ [8,4,6,0,1],
/*        3*/ [9,9,6,2,1]
             ]

С настоящим алгоритмом, упорядочивая колонну 3, ответ - следующий:

var matriz = [
//Columnas:    0 1 2 3 4
/*Filas:  0*/ [7,9,5,4,3],
/*        1*/ [9,5,3,2,7],
/*        2*/ [9,9,6,2,1],
/*        3*/ [8,4,6,0,1]
             ]

Он не так плохой, аккуратный 4 2 2 0, но линии, у которых есть 2, должны бы быть упорядоченными колоннами, которые я хочу.

Для того, чтобы он был точным, функция, которая упорядочивает, он был бы должен получать array (последовательность) со всеми колоннами, которую я хочу упорядочить, например, [3,0,1,2,4]. Это значит, что сначала упорядочивает из-за колонны 3, в случае когда является равны (2), приказывает этих из-за 0, но 9 также он равен, так что он упорядочивает из-за 1, и она осталась бы аккуратной, но из-за сомнений, также упорядочи из-за 1, 2 и 4.

Кроме того, для того, чтобы он был более общим, он был бы хорошим менять, если колонна восходящая или нисходящая, для этого, вместо array должно бы быть массив, первая колонна - число колонны, которое нужно упорядочивать, и вторая колонна - booleano, который он показывает true если он нисходящий, и false если он нисходящий.

var columnas = [//  Columna - esDescendente
                  [   3,        true ],
                  [   0,        true ],
                  [   1,        true ],
                  [   2,        false],
                  [   4,        false]
]

С этим параметром, результат должен бы быть следующим:

var matriz = [
//Columnas:    0 1 2 3 4
/*Filas:  0*/ [7,9,5,4,3],
/*        1*/ [9,9,6,2,1],
/*        2*/ [9,5,3,2,7],
/*        3*/ [8,4,6,0,1]
             ]

Критерий распоряжения не является статическим, но он произведен функцией.

function generar_compara(columna,esDescendente)
{
  var menos=1-2*esDescendente
  var devuelve="return a["+columna+"]>=b["+columna+"]?"+menos+":"+(-menos)
  return Function("a","b",devuelve)
}
console.log(generar_compara(0,true))
console.log(generar_compara(1,false))

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

  • 0, false -> function anonymous(a,b/**/) {return a[0]>=b[0]?-1:1}
  • 1, true -> function anonymous(a,b/**/) {return a[1]>=b[1]?1:-1}

Мой вопрос: Каким был бы критерий, если я хочу упорядочить, например, следующего способа [3,true],[0,true],[1,true],[2,false],[4,false]? и деля функции пример: Как я могу строить генератор сходных функций, для того, чтобы он был более общим?

11
задан 13.04.2017, 16:00
0 ответов