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 ]

  • @kevincox
    link
    4
    edit-2
    1 year ago

    Off-topic: Why is const americanSort = (list, compare) => { ... } such a common pattern these days? Isn’t it simpler to just do function americanSort(list, compare) { ... }

    • @CannotSleep420@lemmygrad.mlOP
      link
      fedilink
      11 year ago

      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.

    • Ephera
      link
      11 year ago

      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…