object.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /**
  2. * DevExtreme (core/utils/object.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. var typeUtils = require("./type");
  11. var variableWrapper = require("./variable_wrapper");
  12. var clone = function() {
  13. function Clone() {}
  14. return function(obj) {
  15. Clone.prototype = obj;
  16. return new Clone
  17. }
  18. }();
  19. var orderEach = function(map, func) {
  20. var keys = [];
  21. var key;
  22. var i;
  23. for (key in map) {
  24. if (Object.prototype.hasOwnProperty.call(map, key)) {
  25. keys.push(key)
  26. }
  27. }
  28. keys.sort(function(x, y) {
  29. var isNumberX = typeUtils.isNumeric(x);
  30. var isNumberY = typeUtils.isNumeric(y);
  31. if (isNumberX && isNumberY) {
  32. return x - y
  33. }
  34. if (isNumberX && !isNumberY) {
  35. return -1
  36. }
  37. if (!isNumberX && isNumberY) {
  38. return 1
  39. }
  40. if (x < y) {
  41. return -1
  42. }
  43. if (x > y) {
  44. return 1
  45. }
  46. return 0
  47. });
  48. for (i = 0; i < keys.length; i++) {
  49. key = keys[i];
  50. func(key, map[key])
  51. }
  52. };
  53. var assignValueToProperty = function(target, property, value, assignByReference) {
  54. if (!assignByReference && variableWrapper.isWrapped(target[property])) {
  55. variableWrapper.assign(target[property], value)
  56. } else {
  57. target[property] = value
  58. }
  59. };
  60. var deepExtendArraySafe = function deepExtendArraySafe(target, changes, extendComplexObject, assignByReference) {
  61. var prevValue;
  62. var newValue;
  63. for (var name in changes) {
  64. prevValue = target[name];
  65. newValue = changes[name];
  66. if ("__proto__" === name || target === newValue) {
  67. continue
  68. }
  69. if (typeUtils.isPlainObject(newValue)) {
  70. var goDeeper = extendComplexObject ? typeUtils.isObject(prevValue) : typeUtils.isPlainObject(prevValue);
  71. newValue = deepExtendArraySafe(goDeeper ? prevValue : {}, newValue, extendComplexObject, assignByReference)
  72. }
  73. if (void 0 !== newValue && prevValue !== newValue) {
  74. assignValueToProperty(target, name, newValue, assignByReference)
  75. }
  76. }
  77. return target
  78. };
  79. exports.clone = clone;
  80. exports.orderEach = orderEach;
  81. exports.deepExtendArraySafe = deepExtendArraySafe;