Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sort strings by using "less/greater than" comparison operators in comparator

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?

like image 806
user3429127 Avatar asked Oct 19 '22 19:10

user3429127


1 Answers

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});
like image 165
Alnitak Avatar answered Nov 15 '22 03:11

Alnitak