chain-able
Version:
interfaces that describe their intentions.
28 lines (21 loc) • 2.47 kB
JavaScript
var isObj = require('../is/obj')
var lengthMinusOne = require('../util/lengthMinusOne')
var getPathSegments = require('./segments')
var isDottable = require('./dottable')
module.exports = function dotset(obj, path, value) {
if (!isDottable(obj, path)) {
return
}
var pathArr = getPathSegments(path)
for (var i = 0; i < pathArr.length; i++) {
var p = pathArr[i]
if (!isObj(obj[p])) {
obj[p] = {}
}
if (i === lengthMinusOne(pathArr)) {
obj[p] = value
}
obj = obj[p]
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LmpzIiwic291cmNlcyI6WyJzZXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgaXNPYmogPSByZXF1aXJlKCcuLi9pcy9vYmonKVxuY29uc3QgbGVuZ3RoTWludXNPbmUgPSByZXF1aXJlKCcuLi91dGlsL2xlbmd0aE1pbnVzT25lJylcbmNvbnN0IGdldFBhdGhTZWdtZW50cyA9IHJlcXVpcmUoJy4vc2VnbWVudHMnKVxuY29uc3QgaXNEb3R0YWJsZSA9IHJlcXVpcmUoJy4vZG90dGFibGUnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRvdHNldChvYmosIHBhdGgsIHZhbHVlKSB7XG4gIGlmICghaXNEb3R0YWJsZShvYmosIHBhdGgpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBwYXRoQXJyID0gZ2V0UGF0aFNlZ21lbnRzKHBhdGgpXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcCA9IHBhdGhBcnJbaV1cblxuICAgIGlmICghaXNPYmoob2JqW3BdKSkge1xuICAgICAgb2JqW3BdID0ge31cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gbGVuZ3RoTWludXNPbmUocGF0aEFycikpIHtcbiAgICAgIG9ialtwXSA9IHZhbHVlXG4gICAgfVxuXG4gICAgb2JqID0gb2JqW3BdXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJjb25zdCIsImxldCJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUNsQ0EsR0FBSyxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsd0JBQXdCLENBQUM7QUFDeERBLEdBQUssQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztBQUM3Q0EsR0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDOztBQUV4QyxNQUFNLENBQUMsT0FBTyxHQUFHLFNBQVMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0VBQ2pELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFO0lBQzFCLE1BQU07R0FDUDs7RUFFREEsR0FBSyxDQUFDLE9BQU8sR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDOztFQUVyQyxLQUFLQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUN2Q0QsR0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDOztJQUVwQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO01BQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFO0tBQ1o7O0lBRUQsSUFBSSxDQUFDLEtBQUssY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFO01BQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLO0tBQ2Y7O0lBRUQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7R0FDYjtDQUNGOyJ9