问题
Today I found a strange for me implementation of strings sorting:
['Data', 'Chata', 'Clata'].sort(function(a, b) { return a > b});
Using this approach we take a valid sorted array as the output - ["Chata", "Clata", "Data"]
.
But I don't clearly understand why it works...
I know that comparator function expects three different outputs - zero, integer above zero, integer below zero. But in this case we can take only two values - true (if a greater than b) or false (if a less than b) (1 or 0 after type coercion).
Can anybody explain me why it works?
回答1:
I'm not entirely sure how it manages to work.
EDIT it actually doesn't.
I produced a test using 1000 numbers (https://jsfiddle.net/alnitak/80cje6gt/) and the single comparator doesn't produce the correct sort order:
var m = 0;
a.sort(function(a, b) { ++m; return a > b} );
var n = 0;
b.sort(function(a, b) { ++n; return a < b ? -1 : a > b ? 1 : 0});
回答2:
When comparing strings, comparison is done letter by letter. So c
has lower symbol value than d
(Check this table)
来源:https://stackoverflow.com/questions/34466125/sort-strings-by-using-less-greater-than-comparison-operators-in-comparator