moy-fp
Version:
A functional programming library.
25 lines (22 loc) • 849 B
JavaScript
import curry from '../Function/curry'
import update from '../List/update'
import assoc from './assoc'
/**
* [k] -> v -> {k: v} -> {k: v}
*/
const assocPath = curry(
(paths, value, obj) => {
const key = paths[0],
length = paths.length
return length === 0 ?
obj :
length === 1 ?
Number.isInteger(key) ?
update(key, value, obj) :
assoc(key, value, obj) :
Number.isInteger(key) ?
update(key, assocPath(paths.slice(1), value, obj !== null && typeof obj === 'object' && Object.hasOwnProperty.call(obj, key) ? obj[key] : []), obj) :
assoc(key, assocPath(paths.slice(1), value, obj !== null && typeof obj === 'object' && Object.hasOwnProperty.call(obj, key) ? obj[key] : {}), obj)
}
)
export default assocPath