JavaScript 深度复制包含嵌套对象、数组和函数的数组?

标签 javascript arrays json copy deep-copy

我有一个像这样结构的数组,我正在尝试获取它的副本(以修改并用于 React setState())。在 Python 中,我可以使用 copy.deepcopy() 但我找不到在 JavaScript 中执行此操作的简单方法。

notes=[
        {
          contents: "Hello World 1",
          function: console.log,
          children: [
            {
              contents: "Hello World A",
              function: console.log,
              children: []
            },
          ]
        },
        {
          contents: "Hello World 2",
          function: console.log,
          children: []
        }
      ]

我在 stackoverflow 上找到了这篇文章和类似的解决方案,但它们都不适合我。 https://medium.com/@Farzad_YZ/3-ways-to-clone-objects-in-javascript-f752d148054d 两种解决方案都只是浅拷贝,并且 JSON.parse 不适用于函数。

我想要一个函数,可以深度复制包含任何嵌套 JavaScript 数据类型的任意结构的数组或对象。

我不想重新发明轮子,编写复杂的递归函数来遍历和克隆所有内容,有没有现有的解决方案?

最佳答案

编辑-您可以使用下面的解决方案或仅导入 Lodash 并使用此 https://lodash.com/docs/#cloneDeep

<小时/>

我正在用我找到的解决方案回答我自己的问题。有人在我链接的文章的评论部分发布了此内容,它似乎有效

notes=[
        {
          contents: "Hello World 1",
          function: console.log,
          children: [
            {
              contents: "Hello World A",
              function: console.log,
              children: []
            },
          ]
        },
        {
          contents: "Hello World 2",
          function: console.log,
          children: []
        }
      ]

function deepCopy(src) {
  let target = Array.isArray(src) ? [] : {};
  for (let key in src) {
    let v = src[key];
    if (v) {
      if (typeof v === "object") {
        target[key] = deepCopy(v);
      } else {
        target[key] = v;
      }
    } else {
      target[key] = v;
    }
  }

  return target;
}

关于JavaScript 深度复制包含嵌套对象、数组和函数的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53273218/

相关文章:

javascript - 测试对象文字中的相等性时的奇怪行为

javascript - OBJLoader 和 OrbitControls 中的 "THREE.OBJLoader is not a constructor"和 "Unexpected token {"

javascript - 如何将此代码从 v3# 转换为 v4#?

arrays - VBA展平分层数组

php - 如何阻止 PHP Domdocument::SaveXML 插入 "CDATA"?

java - 将分号文件拆分为数组,有些奇怪

PHP 随机洗牌数组维护键 => 值

Java Gson 不兼容的类型

Javascript Youtube 抓取 XML 数据,想要附加到 div,不适用于所有版本的 IE

java - 蒙戈Java : How to serialize DBObject as JSON on file?