I'd like to sort a two dimensional array using javascript.
My array :
[
['1','6'],
['1','5'],
['2','3'],
['0','4'],
]
My sorting function :
// 1st sort
myArray.sort( function(a, b) {
return a[0] - b[0];
});
// 2nd sort
myArray.sort( function(a, b) {
return a[1] - b[1];
});
The result :
["2", "3"]
["0", "4"]
["1", "6"]
["1", "5"]
The result should be :
["0", "4"]
["1", "5"] // 5 before 6 and the left column is sorted
["1", "6"]
["2", "3"]
Your second sort is overriding the sorting done by first sort and it is only keeping the second column sorted.
You don't need two sort
functions, just include both in a single sort as:
myArray.sort((a, b) => (a[0] - b[0]) || (a[1] - b[1]));
or without braces
myArray.sort((a, b) => a[0] - b[0] || a[1] - b[1]);
Demo
var myArray = [
['1','6'],
['1','5'],
['2','3'],
['12','13'],
['0','4'],
];
myArray.sort((a, b) => (a[0] - b[0]) || (a[1] - b[1]));
console.log(myArray);
You could use a different approach for an arbitrary length of the arrays.
This solution assumes, that all inner arrays have the same length.
var array = [['1','6', '1'], ['1','5', '1'], ['1','5', '2'], ['2','3', '0'], ['0','4', '0']];
array.sort(function (a, b) {
var d;
a.some((v, i) => d = v - b[i]);
return d;
});
console.log(array.map(a => a.join(' ')));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With