Come ordinare l’array bidimensionale per il valore della colonna?

Qualcuno può aiutarmi a ordinare una matrice bidimensionale in JavaScript?

Avrà dati nel seguente formato:

[12, AAA] [58, BBB] [28, CCC] [18, DDD] 

Dovrebbe assomigliare a questo quando ordinato:

 [12, AAA] [18, DDD] [28, CCC] [58, BBB] 

Quindi, fondamentalmente, l’ordinamento in base alla prima colonna.

Saluti

È così semplice:

 var a = [[12, 'AAA'], [58, 'BBB'], [28, 'CCC'],[18, 'DDD']]; a.sort(sortFunction); function sortFunction(a, b) { if (a[0] === b[0]) { return 0; } else { return (a[0] < b[0]) ? -1 : 1; } } 

Vi invito a leggere la documentazione .

Se vuoi ordinare secondo la seconda colonna, puoi farlo:

 a.sort(compareSecondColumn); function compareSecondColumn(a, b) { if (a[1] === b[1]) { return 0; } else { return (a[1] < b[1]) ? -1 : 1; } } 

L’approccio migliore sarebbe utilizzare quanto segue, in quanto potrebbero esserci valori ripetitivi nella prima colonna.

 var arr = [[12, 'AAA'], [12, 'BBB'], [12, 'CCC'],[28, 'DDD'], [18, 'CCC'],[12, 'DDD'],[18, 'CCC'],[28, 'DDD'],[28, 'DDD'],[58, 'BBB'],[68, 'BBB'],[78, 'BBB']]; arr.sort(function(a,b) { return a[0]-b[0] }); 

prova questo

 //WITH FIRST COLUMN arr = arr.sort(function(a,b) { return a[0] - b[0]; }); //WITH SECOND COLUMN arr = arr.sort(function(a,b) { return a[1] - b[1]; }); 

Nota: la risposta originale ha utilizzato un valore maggiore di (>) invece di meno (-), che è ciò a cui i commenti si riferiscono come errati.

Se sei come me, non vorrai passare attraverso la modifica di ogni indice ogni volta che desideri modificare la colonna per la quale stai ordinando.

 function sortByColumn(a, colIndex){ a.sort(sortFunction); function sortFunction(a, b) { if (a[colIndex] === b[colIndex]) { return 0; } else { return (a[colIndex] < b[colIndex]) ? -1 : 1; } } return a; } var sorted_a = sortByColumn(a, 2); 

Utilizzo della funzione freccia e ordinamento in base al secondo campo stringa

 var a = [[12, 'CCC'], [58, 'AAA'], [57, 'DDD'], [28, 'CCC'],[18, 'BBB']]; a.sort((a, b) => a[1].localeCompare(b[1])); console.log(a) 

Niente di speciale, basta salvare il costo necessario per restituire un valore a un determinato indice da un array.

 function sortByCol(arr, colIndex){ arr.sort(sortFunction) function sortFunction(a, b) { a = a[colIndex] b = b[colIndex] return (a === b) ? 0 : (a < b) ? -1 : 1 } } // Usage var a = [[12, 'AAA'], [58, 'BBB'], [28, 'CCC'],[18, 'DDD']] sortByCol(a, 0) console.log(JSON.stringify(a)) // "[[12,"AAA"],[18,"DDD"],[28,"CCC"],[58,"BBB"]]" 

Dato che il mio dispositivo utilizza decine di colonne, ho ampliato la risposta di @jahroy un po ‘. (anche appena realizzato @ charles-clayton ha avuto la stessa idea.)
Passo il parametro che voglio ordinare, e la funzione di ordinamento viene ridefinita con l’indice desiderato per il confronto su cui avvengono.

 var ID_COLUMN=0 var URL_COLUMN=1 findings.sort(compareByColumnIndex(URL_COLUMN)) function compareByColumnIndex(index) { return function(a,b){ if (a[index] === b[index]) { return 0; } else { return (a[index] < b[index]) ? -1 : 1; } } }