rambdax
Version:
Extended version of Rambda - a lightweight, faster alternative to Ramda
30 lines (24 loc) • 576 B
JavaScript
import { clone } from './clone.js'
import { curry } from './curry.js'
import { has } from './has.js'
import { reduce } from './reduce.js'
function reduceByFunction(
valueFn, valueAcc, keyFn, acc, elt
){
const key = keyFn(elt)
const value = valueFn(has(key, acc) ? acc[ key ] : clone(valueAcc), elt)
acc[ key ] = value
return acc
}
export function reduceByFn(
valueFn, valueAcc, keyFn, list
){
return reduce(
(acc, elt) => reduceByFunction(
valueFn, valueAcc, keyFn, acc, elt
),
{},
list
)
}
export const reduceBy = curry(reduceByFn)