树形结构深拷贝javascript

 "table": [
        {
          "label": "设备编号",
          "prop": "date",
          "fixed":true,
          "sort":true,
          "show":true
        },
        {
          "label": "配送信息",
          "prop": "shippingInformation",
          "show":true
          "children": [
            {
              "label": "姓名",
              "prop": "name",
              "fixed":false,
              "sort":false,
              "show":true
            },
            {
              "label": "电话",
              "prop": "phone",
              "fixed":false,
              "sort":false,
              "show":true
            },
            {
              "label": "省份",
              "prop": "province",
              "fixed":false,
              "sort":false,
              "show":true
            },
            {
              "label": "城市",
              "prop": "city",
              "fixed":false,
              "sort":false,
              "show":true
            },
            {
              "label": "住址",
              "prop": "address",
              "fixed":false,
              "sort":false,
              "show":true
            }
          ],

数组里都是一个个的对象,每个对象里可能还有数组,数组里又是一个个数组的结构怎么深拷贝呢

参考GPT和自己的思路:

对于这种树形结构的深拷贝,可以使用递归的方式进行处理。具体操作如下:

  1. 用 JSON.parse(JSON.stringify(obj)) 的方式可以实现数组和对象的浅拷贝,但这种方式不支持拷贝函数和 undefined 类型的数据。

  2. 定义一个函数 deepClone(obj),判断 obj 的数据类型是否为对象或数组,如果是,就创建一个新的对象或数组,然后遍历 obj 中的每个属性,将属性名和属性值赋给新对象或数组,如果属性值仍然是对象或数组,就继续递归调用 deepClone() 函数,直到遇到基本数据类型或 undefined 类型为止。

下面是递归深拷贝的代码实现,可供参考:

function deepClone(obj) {
    var newObj = Array.isArray(obj) ? [] : {};
    if (obj && typeof obj === "object") {
        for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
                if (obj[key] && typeof obj[key] === "object") {
                    newObj[key] = deepClone(obj[key]);
                } else {
                    newObj[key] = obj[key];
                }
            }
        }
    }
    return newObj;
}

使用该函数进行深拷贝时,可以直接传入需要拷贝的对象,例如:

var newTable = deepClone(table);

其中,table 是需要拷贝的原始数据。经过深拷贝之后,newTable 中的每一个对象以及子对象都是全新的,也就是说拷贝后的数据和原始数据之间是完全独立的,互相不影响。

参考GPT和自己的思路:

可以使用递归方式实现树形结构的深拷贝。遍历每个对象,如果对象的属性是数组,则对数组进行递归处理。

以下是一个示例代码:

function deepClone(obj) {
  let newObj = Array.isArray(obj) ? [] : {};

  for (let key in obj) {
    if (typeof obj[key] === 'object' && obj[key] !== null) {
      newObj[key] = deepClone(obj[key]);
    } else {
      newObj[key] = obj[key];
    }
  }

  return newObj;
}

let newObj = deepClone(oldObj);

这样就可以实现树形结构的深拷贝了。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
您好,要对一个包含数组和嵌套数组的对象进行深拷贝,可以使用递归的方式遍历对象的每一个属性,再根据属性的类型进行相应的处理。对于数组和嵌套数组的情况,可以对数组进行遍历,并对数组中的每个元素进行深拷贝,然后将拷贝后的元素放入新的数组中。

以下是一个示例代码,可以对一个包含数组和嵌套数组的对象进行深拷贝:

function deepClone(obj) {
  // 如果是基本数据类型,直接返回
  if (typeof obj !== 'object' || obj === null) {
    return obj;
  }

  // 创建一个空的对象或数组
  const result = Array.isArray(obj) ? [] : {};

  // 遍历对象的每一个属性
  for (let key in obj) {
    // 对象的属性可能是一个数组或对象,需要进行递归
    result[key] = deepClone(obj[key]);
  }

  return result;
}

// 示例使用
const obj = {
  "table": [
    {
      "label": "设备编号",
      "prop": "date",
      "fixed":true,
      "sort":true,
      "show":true
    },
    {
      "label": "配送信息",
      "prop": "shippingInformation",
      "show":true,
      "children": [
        {
          "label": "姓名",
          "prop": "name",
          "fixed":false,
          "sort":false,
          "show":true
        },
        {
          "label": "电话",
          "prop": "phone",
          "fixed":false,
          "sort":false,
          "show":true
        },
        {
          "label": "省份",
          "prop": "province",
          "fixed":false,
          "sort":false,
          "show":true
        },
        {
          "label": "城市",
          "prop": "city",
          "fixed":false,
          "sort":false,
          "show":true
        },
        {
          "label": "住址",
          "prop": "address",
          "fixed":false,
          "sort":false,
          "show":true
        }
      ]
    }
  ]
};

const objClone = deepClone(obj);

上述代码使用了递归的方式实现深拷贝,能够对包含数组和嵌套数组的对象进行完整的拷贝。注意,这里只是一个示例代码,具体实现方式可能会根据实际情况有所不同。

JSON.parse(JSON.stringify(待拷贝对象))