ramda
Version:
A practical functional library for JavaScript programmers.
29 lines • 960 B
JavaScript
var _isArray = /*#__PURE__*/require("./_isArray.js");
var _isInteger = /*#__PURE__*/require("./_isInteger.js");
/**
* Makes a shallow clone of an object, setting or overriding the specified
* property with the given value. Note that this copies and flattens prototype
* properties onto the new object as well. All non-primitive properties are
* copied by reference.
*
* @private
* @param {String|Number} prop The property name to set
* @param {*} val The new value
* @param {Object|Array} obj The object to clone
* @return {Object|Array} A new object equivalent to the original except for the changed property.
*/
function _assoc(prop, val, obj) {
if (_isInteger(prop) && _isArray(obj)) {
var _idx = prop < 0 ? obj.length + prop : prop;
var arr = [].concat(obj);
arr[_idx] = val;
return arr;
}
var result = {};
for (var p in obj) {
result[p] = obj[p];
}
result[prop] = val;
return result;
}
module.exports = _assoc;