9

I was reading about Javascript recently and ran into some syntax which seemed foreign to me:

const max = {a: 1, b: 2, c: 3}
  |> Object.values 
  |> (_ => Math.max(..._))

What exactly does |> mean in such a scenario?

Shnick
  • 925
  • 3
  • 18
  • 8
    It's the [pipeline operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Pipeline_operator), an experimental feature that allows for more readable function chaining. – Lewis Mar 13 '19 at 13:46
  • maybe a duplicate of https://stackoverflow.com/q/54568053/1447675 – Nina Scholz Mar 13 '19 at 13:51
  • @NinaScholz Rather of [Has anyone proposed a Pipe operator for javascript?](https://stackoverflow.com/q/33550393/1048572) – Bergi Mar 13 '19 at 13:55
  • 4
    I don't really think it's a dupe of any of those, but it should be folded into https://stackoverflow.com/q/9549780/476. – deceze Mar 13 '19 at 13:56
  • @deceze Agreed, it's not a duplicate (or else I would already have closed it), I just wanted to suggest that https://stackoverflow.com/q/33550393 has better answers – Bergi Mar 13 '19 at 13:57

2 Answers2

6

The pipeline operator (|>) is a non-standard experimental operator (currently, works only in Firefox, by enabling it explicitly), which passes its first operand as an argument to its second operand (which should be a function).

Its goal is to make function chaining more readable.

Translated to this case, it will look like this:

const max = (_ => Math.max(..._))(
  Object.values({a: 1, b: 2, c: 3})
)

console.log(max) //3
  • First, pass {a: 1, b: 2, c: 3} to Object.values
  • Then, pass the result to the anonymous function (_ => Math.max(..._))
  • Finally, assign the output to variable max
FZs
  • 11,931
  • 11
  • 28
  • 41
3

|> is the Pipeline Operator. It's currently an experimental operator - it's not yet or may never become standard for JavaScript. It's currently only supported in FireFox via enabling it explicitly.

As such, it is highly recommended to not use it, except for just messing around with it, given its lack of adoption and its experimental nature.

Pang
  • 8,605
  • 144
  • 77
  • 113
Daniel Turcich
  • 1,494
  • 2
  • 21
  • 43