Problem

What does this function do?

const surprise = (...fns) => input => fns.reduce(
  (acc, fn) => fn(acc), input
)
Solution

What does this function do?

const surprise = (...fns) => input => fns.reduce(
  (acc, fn) => fn(acc), input
)

It’s a pipe function that allows you to chain multiple operations together by taking a series of functions as arguments and applying them in a specific order to the input.

Wow, words.

Instead of doing something like this.

const toUpperCase = str => str.toUpperCase()
const removeSpaces = str => str.replace(/\s/g, "")
const addExclamation = str => str + "!"

toUpperCase(removeSpaces(addExclamation("Subscribe to Bytes")))

You can do something like this.

const pipe = (...fns) => input => fns.reduce(
  (acc, fn) => fn(acc), input
)

const formatString = pipe(toUpperCase, removeSpaces, addExclamation)

formatString("Subscribe to Bytes") // SUBSCRIBETOBYTES!

There’s currently a perpetual TC39 proposal for adding a true Pipe operator (|>) to JavaScript.