For example, if I want to sort arrays of an array, which the first element is min, then the second element is min, then the third... I can use sort to do it:
Array with 2 elements
const arrayOfArray=[[2,1],[0,2],[1,3],[0,4]];
arrayOfArray.sort(function(a,b){
if(a[0]!=b[0]){
return a[0]-b[0];
}
return a[1]-b[1];
});
console.log(arrayOfArray);
Array with 3 elements:
const arrayOfArray=[[2,1,5],[0,2,5],[0,2,3],[0,1,1]];
for(let i=0;i<arrayOfArray[0].length;i++){
arrayOfArray.sort(function(a,b){
if(a[0]!=b[0]){
return a[0]-b[0];
}
if(a[1]!=b[1]){
return a[1]-b[1];
}
return a[2]-b[2];
});
}
console.log(arrayOfArray);
How about array with 3,4,5,...n elements? I think this solution is not good enough because it needs to copy and paste if...!=... many times when the array has many elements:
arrayOfArray.sort(function(a,b){
if(a[0]!=b[0]){
return a[0]-b[0];
}
if(a[1]!=b[1]){
return a[1]-b[1];
}
.
.
.
if(a[n-1]!=b[n-1]){
return a[n-1]-b[n-1];
}
return a[n]-b[n];
});
And what if I don't know the length of the array (eg: need to load it in dynamic way)? Is there generic way to do it? eg: recursion, for loop? I tried:
const arrayOfArray=[[2,1,5],[0,2,5],[0,2,3],[0,1,1]];
for(let i=0;i<arrayOfArray[0].length;i++){
arrayOfArray.sort(function(a,b){
return a[i]-b[i];
});
}
console.log(arrayOfArray);
but the output is:
[
[
0,
1,
1
],
[
0,
2,
3
],
[
2,
1,
5
],
[
0,
2,
5
]
]
which is not my desired result.