UNPKG

plain-immutable

Version:
59 lines (47 loc) 1.46 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.removeIn = removeIn; exports.remove = remove; var _index = require('./index'); var _index2 = _interopRequireDefault(_index); var _util = require('./util'); var _set = require('./set'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Remove the leaf key in key path. If any key is not existent, nothing changed * @param keyPath string|array */ function removeIn(keyPath) { if (!Array.isArray(keyPath)) keyPath = [keyPath]; // validate key path first var len = keyPath.length; (0, _util.validateKeyInKeyPath)(keyPath, keyPath[0]); // consider zero length for (var ii = 1; ii < len; ++ii) { (0, _util.validateKeyInKeyPath)(keyPath, keyPath[ii]); } if (keyPath.length > 1) { // remove the key on leaf node var setter = function setter(value) { return _remove.call(value, keyPath[len - 1]); }; return _set.recursivelySet.call(this, keyPath.slice(0, -1), 0, setter, true); } else { return _remove.call(this, keyPath[0]); } } function remove(key) { key = (0, _util.validateKey)(key); return _remove.call(this, key); } function _remove(key) { if (!this.hasOwnProperty(key)) return this; var newThis = this.mutable(); if (Array.isArray(newThis)) { newThis.splice(key, 1); } else { delete newThis[key]; } return (0, _index2.default)(newThis); }