foop
Version:
interfaces that describe their intentions.
52 lines (45 loc) • 3.67 kB
JavaScript
var isObj = require('../is/obj')
var lengthMinusOne = require('../util/lengthMinusOne')
var getPathSegments = require('./segments')
var isDottable = require('./dottable')
/**
* @desc delete a path on an object
* @name dot.delete
* @alias dotRemove
* @alias removePath
*
* @memberOf dot
* @func
* @since 3.0.0
* @extends dot/getPathSegments
*
* @param {Object} obj the object to DELETE the nested property from.
* @param {Dottable | string | Array} path dot-prop-path to use
* @return {void}
*
*
* @example
*
* dot.get({a: {b: 2}}, 'a.b'); //=> 2
* dot.get({a: {b: 2}}, ['a', 'b']); //=> 2
* dot.get({c: {b: 2}}, ['a', 'b']); //=> undefined
*
*/
module.exports = function dotdelete(obj, path) {
if (!isDottable(obj, path)) {
return
}
var pathArr = getPathSegments(path)
for (var i = 0; i < pathArr.length; i++) {
var p = pathArr[i]
if (i === lengthMinusOne(pathArr)) {
delete obj[p]
return
}
obj = obj[p]
if (!isObj(obj)) {
return
}
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLmpzIiwic291cmNlcyI6WyJkZWxldGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgaXNPYmogPSByZXF1aXJlKCcuLi9pcy9vYmonKVxuY29uc3QgbGVuZ3RoTWludXNPbmUgPSByZXF1aXJlKCcuLi91dGlsL2xlbmd0aE1pbnVzT25lJylcbmNvbnN0IGdldFBhdGhTZWdtZW50cyA9IHJlcXVpcmUoJy4vc2VnbWVudHMnKVxuY29uc3QgaXNEb3R0YWJsZSA9IHJlcXVpcmUoJy4vZG90dGFibGUnKVxuXG4vKipcbiAqIEBkZXNjIGRlbGV0ZSBhIHBhdGggb24gYW4gb2JqZWN0XG4gKiBAbmFtZSBkb3QuZGVsZXRlXG4gKiBAYWxpYXMgZG90UmVtb3ZlXG4gKiBAYWxpYXMgcmVtb3ZlUGF0aFxuICpcbiAqIEBtZW1iZXJPZiBkb3RcbiAqIEBmdW5jXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBleHRlbmRzIGRvdC9nZXRQYXRoU2VnbWVudHNcbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9iaiB0aGUgb2JqZWN0IHRvIERFTEVURSB0aGUgbmVzdGVkIHByb3BlcnR5IGZyb20uXG4gKiBAcGFyYW0gIHtEb3R0YWJsZSB8IHN0cmluZyB8IEFycmF5fSBwYXRoIGRvdC1wcm9wLXBhdGggdG8gdXNlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICpcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgIGRvdC5nZXQoe2E6IHtiOiAyfX0sICdhLmInKTsgLy89PiAyXG4gKiAgICBkb3QuZ2V0KHthOiB7YjogMn19LCBbJ2EnLCAnYiddKTsgLy89PiAyXG4gKiAgICBkb3QuZ2V0KHtjOiB7YjogMn19LCBbJ2EnLCAnYiddKTsgLy89PiB1bmRlZmluZWRcbiAqXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZG90ZGVsZXRlKG9iaiwgcGF0aCkge1xuICBpZiAoIWlzRG90dGFibGUob2JqLCBwYXRoKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgcGF0aEFyciA9IGdldFBhdGhTZWdtZW50cyhwYXRoKVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aEFyci5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHAgPSBwYXRoQXJyW2ldXG5cbiAgICBpZiAoaSA9PT0gbGVuZ3RoTWludXNPbmUocGF0aEFycikpIHtcbiAgICAgIGRlbGV0ZSBvYmpbcF1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIG9iaiA9IG9ialtwXVxuXG4gICAgaWYgKCFpc09iaihvYmopKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJjb25zdCIsImxldCJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUNsQ0EsR0FBSyxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsd0JBQXdCLENBQUM7QUFDeERBLEdBQUssQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztBQUM3Q0EsR0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUJ4QyxNQUFNLENBQUMsT0FBTyxHQUFHLFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7RUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUU7SUFDMUIsTUFBTTtHQUNQOztFQUVEQSxHQUFLLENBQUMsT0FBTyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUM7O0VBRXJDLEtBQUtDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3ZDRCxHQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7O0lBRXBCLElBQUksQ0FBQyxLQUFLLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRTtNQUNqQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDYixNQUFNO0tBQ1A7O0lBRUQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7O0lBRVosSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtNQUNmLE1BQU07S0FDUDtHQUNGO0NBQ0Y7In0=