I do not understand why this is was so difficult to figure out.
You'll need Underscore.js to play along at home.
Start with an array like
var sizes = [4, 1, 10, 8];If you just use JavaScript's built in .sort() method, you'll end up with
sizes.sort();
// results in [1, 10, 4, 8]This is because it sorts lexicographically by default. Why? Because it (doesn't) love you.
Here's how to do it using Underscore's sortBy method:
sizes = _.sortBy( sizes, function( val ){ return val; } );
// results in [1, 4, 8, 10]Why does this work? I'm not sure. Ask your dad.
Try natural sort,
it will fit most of your usages.
https://github.com/eladkarako/sort/blob/594a531034ebf527c8f300b2852024035f1aced0/index.html#L111-L125
it will support both numeric, US-ASCII - even an extended Unicode, correctly (by using localeCompare inside).
a live example: https://sort.eladkarako.com/ (it is a line-based sort&unique)