import curry2 from "../function/curry2"; import _getPathArray from "../internals/_getPathArray"; import dissoc from "./dissoc"; import assoc from "./assoc"; import isNil from "../logic/isNil"; import slice from "../list/slice"; /** * Creates a shallow copy of the object * with the element at the specified path removed. * * @see assocPath * @param {string|string[]} path * @param {object} object * @returns {object} */ const dissocPath = (path, object) => { const pathArray = _getPathArray(path); if (pathArray.length === 0) { return { ...object }; } const prop = pathArray[0]; const remainingPath = slice(1, pathArray.length, pathArray); if (pathArray.length === 1) { return dissoc(prop, object); } if (isNil(object[prop])) { return { ...object }; } return assoc(prop, dissocPath(remainingPath, object[prop]), object); }; export default curry2(dissocPath);