Peter van der Zee wrote:
No idea whether this has been discussed before, but I find myself
continuously doing this when sorting arrays with objects:
arr.sort(function(a,b){ if (a.prop< b.prop) return-1; if (a.prop>
b.prop) return 1; return 0; });
With arrows it is better:
arr.sort((a, b) => { if (a.prop< b.prop) return-1; if (a.prop> b.prop)
return 1; return 0; });
With ?: it's even better:
arr.sort((a, b) => (a.prop< b.prop) ?-1 : (a.prop> b.prop) ? 1 : 0);
and if you weed out NaN to avoid the comparison function returning NaN, while
taking advantage of the fact that the return value's sign is all that matters,
not exact {-1, 0, 1} membership, then it's not much worse:
arr.sort((a, b) => { let t = a.prop - b.prop; return (t !== t) ? 0 : t; });
I'm assuming you don't need to sort -0< 0 (which evaluates to false in JS).
Another observation: this last version is the only one that avoids multiple
implicit conversions via toString or valueOf of an object operand, if one or both
of a and b is an object and the first condition (a.prop< b.prop) evaluates to
false. This means the only portable form is the last version.
Yeah, it's a pain to write every time and people will mess up the NaN corner
case. A standard built-in would be good. But why use a string parameter key
instead of just a built-in function?
/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss