无法深度克隆

时间:2021-06-14 15:05:25

标签: javascript lodash

我想复制一个对象。
之后,我计划修改副本中的值,但这些
修改不应影响原始对象。

因此我想制作一个克隆并目前使用 lodash 的 deepClone。

但它不断抛出以下错误:

<块引用>

Error!Object(...) 不是函数

我的对象中没有函数。它只是在以下结构中。
它们只是键值,其中值是字符串或布尔值。

const myOriginalObject {
    mainKey : {
        isMobile: true,
        data: {
            id: '',
            header: '',
            flag: '',
            desc1: '',
            desc2: '',
            logo: {
                src: '',
                alt: '',
            },
            img: {
                src: '',
                alt: '',
            },
        }
    }
}

只是为了测试它创建了一个随机对象,如下所示。
即使这样也会引发同样的错误。

  const myOriginalObject = {
    b: '',
    c: ''
  }

这是深拷贝的实现。 myOriginalObject 可以是上述对象之一。

import { cloneDeep } from 'lodash/cloneDeep';

const myClone = cloneDeep(myOriginalObject);

我做错了什么?请建议。谢谢。

更新:

我来自 package.json 的 lodash 版本

"lodash": "^4.17.20",

错误:

<块引用>

render 出现错误:TypeError: Object(...) is not a function

2 个答案:

答案 0 :(得分:0)

你可以这样做:

import { cloneDeep } from 'lodash'; // <= Notice import method

const myOriginalObject = { a: '', b: ''};

const myClonedObj = cloneDeep(someObj);

或者:

import _ from 'lodash'; // <= Notice import method

const myOriginalObject = { a: '', b: ''};

const myClonedObj = _.cloneDeep(someObj);

'lodash/cloneDeep' 导入似乎不起作用(但我不确定为什么)。

[可能是 cloneDeep_ 中使用不同的目录来完整实现,但同样,不确定。]

答案 1 :(得分:0)

试试这个

const myOriginalObject {
    mainKey : {
        isMobile: true,
        data: {
            id: '',
            header: '',
            flag: '',
            desc1: '',
            desc2: '',
            logo: {
                src: '',
                alt: '',
            },
            img: {
                src: '',
                alt: '',
            },
        }
    }
}

const newObj = JSON.parse(JSON.stringify(myOriginalObject));

现在对 newObj 进行任何更改,它不会反映到 myOriginalObject;