If an element is out of order, remove it from the array.
An example in everyone’s (least) favorite language:
const americanSort = (list, compare) => list.reduce((acc, cur) => { const lastElement = acc.length > 0 ? acc[acc.length - 1] : null; return lastElement ? compare(lastElement, cur) < 1 ? [...acc, cur] : acc : [cur]; }, []);
console.log(americanSort([5, 2, 6, 5, 20, 10, 40], (a, b) => a - b))
outputs Array(4) [ 5, 6, 20, 40 ]
Off-topic: Why is
const americanSort = (list, compare) => { ... }
such a common pattern these days? Isn’t it simpler to just dofunction americanSort(list, compare) { ... }
It makes me feel cool and I’m already used to doing it, so doing it the function way becomes slower from being so used to doing it the other way.
Yeah, I really don’t get that one. I code in multiple languages where one could use anonymous functions like that, but in all of those languages, it’s universally agreed upon that you basically always use named functions, unless you’re directly passing it as a parameter.
My best guess for this being a common pattern in JS is that people have less strong feelings about code readability and are often untrained, so may just develop these weird habits without outside feedback…
I feel like the
americanSort
would be to remove all the numbers and replace them with the same number repeating forever.americanSort([55, 331, 26, 89]) ->