I'm trying to sort an array of arrays with integers inside, for example:
var array = [[123, 3], [745, 4], [643, 5], [643, 2]];
How can I sort it in order to return something like the following?
array = [[745, 4], [643, 2], [643, 5], [123, 3]];
You can pass a custom comparison function to Array.prototype.sort(), like so:
var sortedArray = array.sort(function(a, b) { return a - b; });
This would sort an array of integers in ascending order. The comparison function should return:
0 if you want a to appear before b0 if you want b to appear before a0 if a and b are the sameSo, for this example you would want something like:
var sortedArray = array.sort(function(a, b) {
return b[0] - a[0];
});
If you wanted to sort on both elements of each sub-array (ie. sort by the first element descending, then if they are the same then sort by the second element descending), you could do this:
var sortedArray = array.sort(function(a, b) {
if (a[0] == b[0]) {
return a[1] - b[1];
}
return b[0] - a[0];
});
See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort for more info.
[2, 2] > [1, 3] is true and [1, 0] > [0, 1] is true... etc.> and < operators you can explicitly return 1, -1, or 0 from the compare function.< operator - it isn't correct in all situations. The arrays are implicitly stringified via .join(',') before comparing (see stackoverflow.com/questions/8328908/…). This means that [11, 2] < [2, 3] == true which is not what you want.Array.prototype.sort() sorts the array in-place. The assignment to sortedArray is a bit misleading. To return a new array you should use toSorted() instead. Docs: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Assuming you want to sort by the first index in your example, the sort function exists to solve your problem.
let ans = [[123, 3], [745, 4], [643, 5], [643, 2]].sort( (a, b) => {
return b[0] - a[0]
})
console.log(ans)
A solution for the arrays with generic lengths (not limited to 2 or equal) can be as below:
var array = [[123, 3], [745, 4], [643, 5], [643, 2]];
array.sort((a,b)=>
{
for(let i=0;i<a.length && i<b.length;i++){
if(a[i]!==b[i]){
return a[i]-b[i];
}
}
return a.length-b.length;
}
)
console.log(array)
const arr = [
[745, 4],
[643, 2],
[123, 3],
[643, 5],
];
arr.sort((a, b) => {
for (let i = 0; i < a.length && i < b.length; i++) {
if (a[i] === b[i]) {
// these elements are equal, move to next element
} else {
// these elements are not equal so compare them
return (a[i] + "").localeCompare(b[i] + "", undefined, {
numeric: true,
});
}
}
return 0; // since nothing was returned, both arrays are deeply equal
}); // sort array of variable length arrays alphabetically
const order = [ "red", "green", "blue" ];defines the order and you want to sort[ "blue", "green", "red" ]according toorder), then see Sort array based on another array.