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