【问题标题】:Deep clone an object that contains both an Immutable.js object and a vanilla JS object深度克隆一个同时包含 Immutable.js 对象和 vanilla JS 对象的对象
【发布时间】:2020-12-04 18:38:32
【问题描述】:

在我的应用程序中,我有一个包含 Immutable.js 对象和 vanilla JS 对象的对象。我想深度复制那个对象。使用 Lodash 的 cloneDeep 函数,我收到一条警告,上面写着:iterable.length has been deprecated, use iterable.size or iterable.count().

有没有办法克隆整个对象?

我要深度克隆的对象是这样的:

obj: {
  immutableJSObj: EditorState, // this is the one that can't be copied with Lodash
  vanillaJSObj: {
    a: { c: ... },
    b: { d: ... }
  }
}

【问题讨论】:

    标签: javascript lodash immutable.js draftjs


    【解决方案1】:

    我想我找到了解决办法。我知道Immutable.fromJS deep 克隆了一个 Immutable.js 对象。我能够对包含 Immutable 和 VanillaJS 对象的对象使用相同的函数。

    例子:

    const clonedObj = Immutable.fromJS(sentences).toJS()
    

    【讨论】:

    • 请注意,toJS 也会将嵌套的不可变对象转换回非不可变对象。
    • @dube 我认为这也会发生。但是当我测试它时,Immutable.js 对象保持不变。我认为这是因为当您使用fromJS 时,Immutable.js 对象会再次被包装。所以当它被打开时,里面的对象保持不变。这是我克隆对象后的console.logimgur.com/RekXOqq。但是感谢您的评论。
    • fromJS 不包装已经不可变的对象。您必须添加更多代码才能查看发生了什么,但您的解释不可能是这样。
    • @dube 可能你是对的。我只是猜测可能发生了什么。我只使用 Immutable.js 和 Draft.js,所以我不太了解它。但是上面的功能以某种方式解决了我的问题。如果您知道更可靠的方法,那就太好了。
    猜你喜欢
    • 2013-10-11
    • 2023-04-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多