Leonid Gordun Leonid Gordun - 1 year ago 28
Javascript Question

JavaScript sort of Array of arrays

I have this array of arrays. I want it to be sorted by arrays' length.
I use

array.sort( (a, b) => a.length > b.length) );


[
[],
[ 2, 2, 2, 2, 2 ],
[],
[],
[ 5 ],
[ 3, 3, 3, 3 ],
[],
[],
[ 1 ],
[ 2, 2 ],
[ 1 ],
[],
[ 4 ],
[ 3 ],
[ 1, 1 ],
[],
[ 5, 5 ],
[],
[],
[ 4, 4, 4, 4, 4, 4 ],
[],
[ 3 ],
[ 5 ],
[],
[ 5 ],
[ 1, 1 ],
[],
[ 3 ],
[],
[],
[],
[],
[ 4 ],
[ 1 ],
[ 4, 4, 4, 4 ],
[],
[ 5, 5, 5, 5 ],
[],
[],
[ 3 ],
[ 5 ],
[ 2 ],
[],
[],
[ 2 ],
[],
[],
[ 1, 1, 1 ],
[],
[ 4 ],
[ 3, 3, 3 ],
[],
[],
[ 1, 1 ],
[],
[ 4, 4 ],
[ 2, 2, 2 ],
[],
[ 2 ],
[ 2 ],
[ 4 ],
[ 2 ],
[ 3 ],
[ 2 ],
[],
[],
[],
[ 5 ] ]


But after all sorting returns this. Why array of length of 6 with 4 inside it is placed in the wrong place?

[
[],
[],
[],
[],
[ 5 ],
[ 2 ],
[],
[],
[ 1 ],
[ 3 ],
[ 1 ],
[],
[ 4 ],
[ 3 ],
[ 2 ],
[],
[ 4 ],
[],
[],
[ 2 ],
[],
[ 3 ],
[ 5 ],
[],
[ 5 ],
[ 2 ],
[],
[ 2 ],
[],
[],
[],
[],
[ 4 ],
[ 1 ],
[],
[],
[],
[],
[],
[ 3 ],
[ 5 ],
[ 2 ],
[],
[],
[ 2 ],
[],
[],
[],
[],
[ 4 ],
[],
[ 4, 4, 4, 4, 4, 4 ],
[ 5 ],
[ 5, 5 ],
[ 1, 1 ],
[ 4, 4 ],
[ 3, 3 ],
[ 3, 3 ],
[ 1, 1 ],
[ 2, 2 ],
[ 1, 1 ],
[ 1, 1, 1 ],
[ 2, 2, 2 ],
[ 3, 3, 3 ],
[ 5, 5, 5, 5 ],
[ 3, 3, 3, 3 ],
[ 4, 4, 4, 4 ],
[ 2, 2, 2, 2, 2 ] ]


What is wrong with this?

Answer Source

To do the sort function, you have to provide the max, min equal (+1 (>0 actually), -1 (<0 actually), 0 (for equals)), the faster way is by substract the results:

arr.sort(function(a, b){
  // ASC  -> a.length - b.length
  // DESC -> b.length - a.length
  return a.length - b.length ;
});
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download