Ecma6,Object.assign 不进行深层复制[重复]

2024-04-21

dst = { "a" : 1}
src = { "edf" : {"zyx" : "right"}}
Object.assign(dst, src)
src.edf.zyx = "wrong"
console.log(dst["edf"]["zyx"])

我期待看到'right'作为输出,但它打印'wrong'.

它的意思是,Object.assign没有完成复杂对象从源到目标的深度复制。我怎样才能进行深复制?

注意:我知道lodash.deepClone,但我试图避免外部框架


首先,我想告诉您,这不是万无一失的解决方案(对于日期对象)。如果您想要“正确”作为答案,这是您的解决方案:

var dst,src = { "edf" : {"zyx" : "right"} };
dst = JSON.parse(JSON.stringify(src));
dst["a"] = 1;
src.edf.zyx = "wrong";
console.log(src, dst);

因此,请阅读这些链接以更好地理解深度复制

克隆 JavaScript 对象的最优雅的方法 https://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object

将 JavaScript 对象复制到新变量而不是通过引用? https://stackoverflow.com/questions/18359093/how-to-copy-javascript-object-to-new-variable-not-by-reference

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ecma6,Object.assign 不进行深层复制[重复] 的相关文章

随机推荐

  • 适用于 Windows 的 SVN 挂钩

    我用谷歌搜索了一下 发现确实没有适用于 Windows 的 SVN hooks 资源 所以我想我应该在这里创建一个维基来集中它 如果您贡献 请务必注明 钩子的名称 脚本的作用 实际脚本 注意 我怀疑发布史诗般的脚本不会有用 防止提交空注释
  • 具有 Jetty 连接器的 Restlet 2.0.8 不会恢复 SSL 会话,而 Simple 连接器会恢复 SSL 会话

    有谁知道这是为什么 或者如何解决它 我正在使用 android 通过 httpclient 连接 简单连接器恢复连接很好 但 Jetty 每次都会执行新的握手 代码是相同的 这只是我在构建路径上获得的连接器 不断地重做握手会消耗大量的数据和
  • 如何使弹丸转弯时带有弧线

    我有一门大炮 可以以抛物线弧线发射子弹 现在 当我发射子弹时 子弹的旋转速度与从大炮中发射时的旋转速度相同 如何使子弹在空气中飞行时沿着弧线旋转 我尝试了以下作为在项目符号上运行的脚本 附件1 public class PointingBe
  • SQL Server Reporting Services 2008 R2 始终显示登录提示

    每当我尝试通过 URL 访问 SSRS 2008 R2 即在网络上发布后 时 访问报告时总是显示登录提示 开发环境中不会出现该问题 如何防止在我尝试访问报告时显示此登录提示 目前 我们正在通过提供用户名和密码来解决这个问题
  • 模拟器未切换到下一个活动

    我对 Android 编程完全陌生 我正在做一个简单的应用程序 其中显示启动屏幕 然后显示登录屏幕 问题是模拟器不会超出启动屏幕 Android 清单
  • Groovy - XmlNodePrinter 打印空白文件

    我正在尝试将格式化的 xml 打印到文件中 但我的 XmlNodePrinter 仅打印一个空白文件 我认为我传入的 xml 对象已正确填充 我可以使用 StreamingMarkupBuilder 打印它 但它的格式全部在一行上 我不知道
  • 如何设置 Xamarin Picker 中项目列表的样式(在 Android 中)

    我有一个 Xamarin Android 应用程序 它使用选取器从值列表中进行选择 我一直在改变应用程序的风格 但遇到了选择器的问题 虽然我可以设置 TextColor 但无法设置占位符文本的颜色 在搜索帮助后 我实现了一个自定义渲染器 现
  • Jekyll:不允许操作@apply2files

    我正在使用 Windows 10 的 Linux 子系统 我在其中安装了 Jekyll 但是当我运行时bundle exec jekyll serve它给了我 jekyll 3 8 6 Error Operation not permitt
  • 检测视口单元(使用modernizr或普通js)并提供适当的样式表

    实际上 三周以来我一直在尝试解决一个问题 我正在尝试测试对大众单位的支持 并在浏览器不支持该单位时提供单独的样式表 我阅读了modernizr教程并且熟悉modernizr css检测 但是我在网上没有找到vh单位 视口相对单位 的测试 所
  • 不同子域上的会话 cookie 是否算作第 3 方?

    假设我有一个网站www example com其中有一个 IFRAME 指向 ASP NET 站点myapp othersite com 据我所知 这会导致会话和第三方 cookie 出现问题 如果我将嵌入式应用程序移至myapp exam
  • Python 格式化小数,具有最少小数位数

    我有一些DecimalPython 中的实例 我希望将它们格式化为 Decimal 1 gt 1 00 Decimal 12 0 gt 12 00 Decimal 314 1 gt 314 10 Decimal 314 151 gt 314
  • 使用 NHibernate 在延迟加载场景中使用 Castle.DynamicProxy 实现 IDataErrorInfo

    我已经使用 Castle DynamicProxy IIterceptor 实现了 IDataErrorInfo 接口 我还实现了一个 NHibernate 拦截器 它使用该拦截器实例化我的实体 问题在于延迟加载的实体 这些是使用 nhib
  • 在现代 Perl 中编写异常类的最佳实践

    With Exception Class https metacpan org pod Exception Class 我可以将异常定义为类 并且一旦将它们加载到任何地方 它们就可以在任何地方使用 但是很多地方 包括 E C 本身的文档 都
  • 在 Inno Setup 中获取 MAC 地址

    我尝试使用下面的代码来获取 Inno Setup 中的 mac 地址 但出现错误 内部错误 ExtractTemporaryFile 找不到文件 ISID dll 我已经复制了ISID dll在应用程序文件夹中仍然出现上述错误 如果我遗漏了
  • ggplot 中不同宽度的堆积条形图

    我尝试构建一个具有不同宽度的堆积条形图 以便宽度表示分配的平均数量 而高度表示分配的数量 接下来 您将找到我的可重现数据 procedure c method1 method2 method3 method4 method1 method2
  • 如何将整数转换为字符串? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在 Objective C 中从 int 转换为 string 示例代码 https stackoverflow com questions 1104815 how to convert from
  • 尝试从c++ linux执行命令行代码

    我尝试了以下代码 从 C 代码与命令行进行通信 include
  • 使用 Python 请求发送 SOAP 请求

    是否可以使用Python的requests http docs python requests org en master 库发送 SOAP 请求 这确实是可能的 以下是使用普通请求库调用天气 SOAP 服务的示例 import reque
  • Docker 命令无法连接到 Docker 守护进程

    我想转向 Docker 所以我刚刚开始尝试它 我已经在 VirtualBox Ubuntu 15 10 Wily Werewolf 安装上安装了 Docker 并且作为在这里建议 https blog docker com 2015 04
  • Ecma6,Object.assign 不进行深层复制[重复]

    这个问题在这里已经有答案了 dst a 1 src edf zyx right Object assign dst src src edf zyx wrong console log dst edf zyx 我期待看到 right 作为输出