UNPKG

ut2

Version:

一个现代 JavaScript 实用工具库。[点击查看在线文档]。

57 lines (54 loc) 2.14 kB
import isArray from './isArray.js'; import isObject from './isObject.js'; import isObjectLike from './isObjectLike.js'; import isPlainObject from './isPlainObject.js'; import { nativeUndefined } from './internals/native.js'; import allKeys from './allKeys.js'; function baseMerge(object, source, getKeys, customizer, stack) { if (stack === void 0) { stack = new WeakMap(); } var obj = Object(object); if (!isObject(source) || obj === source) { return obj; } var keys = getKeys(source); var hasCustomizer = typeof customizer === 'function'; keys.forEach(function (key) { var srcValue = source[key]; var srcIsObj = isObject(srcValue); if (srcIsObj && stack.has(srcValue)) { obj[key] = srcValue; } else { var newValue = hasCustomizer ? customizer(obj[key], srcValue, key, obj, source) : nativeUndefined; if (newValue !== nativeUndefined) { obj[key] = newValue; } else { var objValue = obj[key]; var newObjValue = void 0; if (srcIsObj) { stack.set(srcValue, true); if (isArray(srcValue)) { newObjValue = isArray(objValue) ? objValue : []; } else if (isPlainObject(srcValue)) { newObjValue = isObjectLike(objValue) ? objValue : {}; } } if (newObjValue) { obj[key] = baseMerge(newObjValue, srcValue, getKeys, customizer, stack); } else if (srcValue !== nativeUndefined || !(key in obj)) { obj[key] = srcValue; } } } }); return obj; } function merge(object, source, customizer, getKeys) { if (getKeys === void 0) { getKeys = allKeys; } return baseMerge(object, source, getKeys, customizer); } merge.NOT_MERGE_ARRAYS = function (objValue, srcValue) { return (isArray(srcValue) ? srcValue : nativeUndefined); }; export { merge as default };