in JavaScript, se ho un array di array, come la seguente:Utilizzando Javascript per ordinare un array di array numerici
X = [ [1,2,3,4],
[1,1,2,3],
[1,1,3],
[1,4],
[2,1,2],
[2,2]
]
Javascript smista il mio allineamento, confrontando prima voce prima, poi la seconda, e così via , in modo che X.sort()
restituisce quanto segue:
[ [1,1,2,3],
[1,1,3],
[1,2,3,4],
[1,4],
[2,1,2],
[2,2]
]
che è quello che voglio. Il problema è che l'operatore di confronto per confrontare gli elementi negli array è lessicografico, così [10,2] < [2,2]
, e, per esempio,
[[10,2],[1,1,3],[2,2]].sort() -> [[1,1,3],[10,2],[2,2]]
ho bisogno di ordinare numericamente, in modo che ho un array ordinato di [[1,1,3],[2,2],[10,2]]
.
Ho provato ad utilizzare una funzione di confronto di function(a,b){return (a-b) }
, che avrebbe funzionato per l'ordinamento di una serie di numeri, ma questo non riesce a correttamente sorta mia matrice, che ha un senso (credo) perché [10,2] - [1,1,3]
rendimenti NaN
Come faccio andare a ordinare una matrice di array numerici?
Se si modifica la funzione di confronto per tenere conto del fatto che gli argomenti passati sono array, dovrebbe funzionare. http://jsfiddle.net/SYHr2/ – Rikonator
@Rikonator Ottima soluzione, si potrebbe desiderare di postare che come risposta, sembra funzionare – Ian
@Rikonator Fantastic! Mi dà la capacità di smistamento di cui ho bisogno con una funzione snella che non sovrascrive il metodo naturale .sort. Se lo scrivi come risposta, lo accetto. – ckersch