Skip to content

Instantly share code, notes, and snippets.

@taewo
Created July 25, 2019 00:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save taewo/a43c62f31a6c2fb17a87b15e85a69780 to your computer and use it in GitHub Desktop.
Save taewo/a43c62f31a6c2fb17a87b15e85a69780 to your computer and use it in GitHub Desktop.
Javascript Pipe
const arr = [1, 2, 3]
const sum = (a, b) => a + b
const result = arr.reduce(sum)
// console.log(result)
// arr.forEach(i => console.log(i))
const each = (f, arr) => {
let i = 0
while(i < arr.length) {
f(arr[i])
i++
}
}
const newArr = arr.map(i => i + 10)
// console.log(newArr)
const map = (f, arr) => {
const result = []
each((i) => {
result.push(f(i))
}, arr)
return result
}
// console.log(map((i) => i + 2, [2,3,4]))
const reduce = (f, initValue, arr) => {
const init = arr ? initValue : initValue[0]
arr = arr ? arr : initValue
let result = init
each((i) => {
result = f(i, result)
}, arr)
return result
}
const reduced1 = reduce(sum, arr) // 6
const reduced2 = reduce(sum, 10, arr) // 16
console.log(reduced1)
console.log(reduced2)
const pipe = (init, ...funcs) => {
// console.log(init)
// console.log(funcs)
// return funcs[2](funcs[1](funcs[0](init)))
// let result = init
// funcs.forEach(f => {
// result = f(result)
// })
// return result
// return funcs.forEach((elem) => {
// console.log(1, elem)
// })
return reduce((f, result) => {
return result = f(result)
}, init, funcs)
}
const piped = pipe(
10,
(i) => i + 10,
(i) => i * 2,
(i) => i + 1,
) // 41
console.log('* piped')
console.log(piped)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment