hw_15_03_DEEP copy.html 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <header>
  2. Deep Copy
  3. </header>
  4. <body>
  5. <script>
  6. function walker(parent) {
  7. let res = undefined;
  8. let isObject = true;
  9. if (Array.isArray(parent)) {
  10. res = [];
  11. }
  12. else if (parent != null && typeof parent === "object") {
  13. res = {};
  14. }
  15. else {
  16. res = parent;
  17. isObject = false;
  18. }
  19. if (isObject) {
  20. for (el in parent) {
  21. res[el] = walker(parent[el]);
  22. }
  23. }
  24. return res;
  25. }
  26. const table = {
  27. tagName: 'table',
  28. attrs: {
  29. border: "1",
  30. },
  31. children: [
  32. {
  33. tagName: 'tr',
  34. children: [
  35. {
  36. tagName: "td",
  37. children: ["1x1"],
  38. },
  39. {
  40. tagName: "td",
  41. children: ["1x2"],
  42. },
  43. ]
  44. },
  45. {
  46. tagName: 'tr',
  47. children: [
  48. {
  49. tagName: "td",
  50. children: ["2x1"],
  51. },
  52. {
  53. tagName: "td",
  54. children: ["2x2"],
  55. },
  56. ]
  57. }
  58. ]
  59. }
  60. // document.body.append(walker(table)); //вернет <table border='1' ....
  61. const arr = [1, "string", null, undefined, { a: 15, b: 10, c: [1, 2, 3, 4], d: undefined, e: true }, true, false]
  62. const arr2 = walker(arr) //arr2 и все его вложенные массивы и объекты - другие объекты, которые можно менять без риска поменять что-то в arr
  63. const table2 = walker(table) //аналогично
  64. </script>
  65. </body>