123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- import _curry3 from "./internal/_curry3.js";
- import _isObject from "./internal/_isObject.js";
- import mergeWithKey from "./mergeWithKey.js";
- /**
- * Creates a new object with the own properties of the two provided objects.
- * If a key exists in both objects:
- * - and both associated values are also objects then the values will be
- * recursively merged.
- * - otherwise the provided function is applied to the key and associated values
- * using the resulting value as the new value associated with the key.
- * If a key only exists in one object, the value will be associated with the key
- * of the resulting object.
- *
- * @func
- * @memberOf R
- * @since v0.24.0
- * @category Object
- * @sig ((String, a, a) -> a) -> {a} -> {a} -> {a}
- * @param {Function} fn
- * @param {Object} lObj
- * @param {Object} rObj
- * @return {Object}
- * @see R.mergeWithKey, R.mergeDeepWith
- * @example
- *
- * let concatValues = (k, l, r) => k == 'values' ? R.concat(l, r) : r
- * R.mergeDeepWithKey(concatValues,
- * { a: true, c: { thing: 'foo', values: [10, 20] }},
- * { b: true, c: { thing: 'bar', values: [15, 35] }});
- * //=> { a: true, b: true, c: { thing: 'bar', values: [10, 20, 15, 35] }}
- */
- var mergeDeepWithKey =
- /*#__PURE__*/
- _curry3(function mergeDeepWithKey(fn, lObj, rObj) {
- return mergeWithKey(function (k, lVal, rVal) {
- if (_isObject(lVal) && _isObject(rVal)) {
- return mergeDeepWithKey(fn, lVal, rVal);
- } else {
- return fn(k, lVal, rVal);
- }
- }, lObj, rObj);
- });
- export default mergeDeepWithKey;
|