merge.js 1013 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. var isArray = require('./isArray')
  2. var isPlainObject = require('./isPlainObject')
  3. var isFunction = require('./isFunction')
  4. var each = require('./each')
  5. var helperCheckCopyKey = require('./helperCheckCopyKey')
  6. function handleMerge (target, source) {
  7. if ((isPlainObject(target) && isPlainObject(source)) || (isArray(target) && isArray(source))) {
  8. each(source, function (val, key) {
  9. if (helperCheckCopyKey(key)) {
  10. target[key] = isFunction(source) ? val : handleMerge(target[key], val)
  11. }
  12. })
  13. return target
  14. }
  15. return source
  16. }
  17. /**
  18. * 将一个或多个源对象合并到目标对象中
  19. *
  20. * @param {Object} target 目标对象
  21. * @param {...Object}
  22. * @return {Boolean}
  23. */
  24. var merge = function (target) {
  25. if (!target) {
  26. target = {}
  27. }
  28. var args = arguments
  29. var len = args.length
  30. for (var source, index = 1; index < len; index++) {
  31. source = args[index]
  32. if (source) {
  33. handleMerge(target, source)
  34. }
  35. }
  36. return target
  37. }
  38. module.exports = merge