sindresorhus/eslint-plugin-unicorn
Rule proposal: Enforce compare function style for `Array#sort()`
Closed
#1,473 opened on Aug 8, 2021
help wantednew rule
Repository metrics
- Stars
- (5,022 stars)
- PR merge metrics
- (Avg merge 1d 16h) (399 merged PRs in 30d)
Description
I've seen many people just write the compare function too complicated, yes sometimes maybe it's more readable, but sometimes it's just too long.
Fail
array.sort((a, b) => {
if (a > b) {
return 1;
}
if (a < b) {
return -1;
}
return 0;
});
array.sort((a, b) => a > b ? 1 : -1);
array.sort((a, b) => {
if (a.foo > b.foo) {
return 1;
}
if (a.foo < b.foo) {
return -1;
}
if (a.bar > b.bar) {
return 1;
}
if (a.bar < b.bar) {
return -1;
}
return 0;
});
array.sort(() => Math.random() > 0. 5 ? 1 : -1);
Pass
array.sort((a, b) => a - b);
array.sort((a, b) => a.localeCompare(b));
array.sort((a, b) => a.foo - b.foo || a.bar - b.bar);
array.sort(() => Math.random() - 0.5);
This rule should not fixable unless we are sure they are numbers.