const fnMap = (items, fn) => {
const r = []
for (let i = 0; i < items.length; i++) {
r.push(fn(items[i], items, i))
}
return r
}
const fnReduce = (items, reducer, base) => {
let r = base === undefined ? items.shift() : base
for (let i = 0; i < items.length; i++) {
r = reducer(r, items[i], i)
}
return r
}
const fnFilter = (items, filter) => {
const r = []
for (let i = 0; i < items.length; i++) {
if (filter(items[i], items, i)) {
r.push(items[i])
}
}
return r
}
fnMap([1,2,3,4,5], (x, a, idx) => x*(idx+1))
fnReduce([10, 20, 30], (t, n, idx) => t + n, 0)
fnFilter([1,2,3,4,5,6,7,8,9], (x, a, idx) => x % 2)