【问题标题】:Should I Use Angular.copy() or _.clone()?我应该使用 Angular.copy() 还是 _.clone()?
【发布时间】:2014-12-12 06:05:53
【问题描述】:

我正在开发一个同时具有 Angular 和 Underscore 作为依赖项的项目。

当我需要创建对象的副本时,根据我当时的心情,我可能会使用angular.copy()_.clone()

我突然想到,其中一种方法可能比另一种更快速/可靠/稳健。

假设这两个库都已包含在内,这两个函数中是否存在任何已知问题使其使用起来比另一个更好或更差?

【问题讨论】:

  • 您是否有任何已经运行过的比较结果,可能是 jsperf?或者你还没有做任何研究。
  • 这两种方法显然执行了两个不同的任务,根据文档,(深拷贝与浅拷贝)因此最好使用取决于您在每种情况下究竟想要做什么。跨度>
  • 所以,lodash 有一个 cloneDeep 方法,如果你将布尔值传递给 lodash 的 clone 方法,它会根据文档创建一个深度克隆。与 angular.copy 相比,这些方法的性能有什么建议吗?

标签: angularjs underscore.js


【解决方案1】:

关于您的问题: angular.copy 和 _.clone 是不同的。这不是哪个更好的问题,而是@Kevin B 在 cmets 中所说的您需要什么。

angular.extend() 另一方面,是类似于 _.clone 的浅拷贝

Angular.copy vs Angular.extend

性能方面,我不确定哪个更好,但出于意见考虑,我反对使用任何 Angular 应用程序将库包含在全局范围(下划线)中,因为通常这些内容写为 angular modules。 angular.copy/angular.extend 在这种情况下会赢。

浅/深拷贝

很简单,如果对象只有原始字段,那么显然你会选择浅拷贝,但如果对象有其他对象的引用,那么根据需求,应该选择浅拷贝或深拷贝。我的意思是,如果没有随时修改引用,那么深拷贝就没有意义了。你可以选择浅拷贝。但是如果引用经常被修改,那么你需要去深拷贝。同样,没有硬性规定,一切都取决于要求。

Source

【讨论】:

  • "但是如果引用经常被修改,那么你需要去深拷贝。"相反,我会说,如果引用被修改,那么无论你做深还是浅可能都很重要,但如果不是,那么它可能无关紧要。事实上,我会说在修改引用的情况下,您更经常想要使用浅拷贝。但正如livepo所说,您需要根据具体情况做出决定。至于性能,一般来说,浅层克隆应该比深层克隆更快,尤其是对于深层数据结构。对于浅层结构,它可能取决于库。
  • 我通常将下划线作为一项服务包含在需要进行大量数据转换的应用程序中。这使您不必使用全局_。这种方法也适用于其他有用的、独立的库,例如时刻。
  • 我敢打赌你的答案在 2016 年会有所不同。你可以很容易地使用 common 或 require 使用依赖注入(不是 Angular),并可以访问下划线或 lodash。在某些情况下,Lodash 被发现比原生浏览器方法更快,例如 Chrome 中的 _.forEach。在大规模数据应用中可能非常重要。
  • 提供的链接(Angular.copy vs Angular.extend)不再起作用
【解决方案2】:

我们收到了一些错误报告,确认使用 angular.copy 确实会在某些 Windows 手机上创建空对象。 因此,如果您需要在移动设备上支持任何版本的 IE,请不要使用 angular.copy! 据说这个bug已经被微软修复了,但我们还是不得不处理它......

其实你也可以用Object.assign()...

文档:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

更多示例:https://googlechrome.github.io/samples/object-assign-es6/

我知道它说没有 IE,但我在我的 IE11 上尝试过,它可以工作...

【讨论】:

  • 我在对象中使用 angular.copy() 时遇到问题是“hashKey”并且比较错误。 Object.asign() 解决了一个问题。
猜你喜欢
  • 2013-03-10
  • 1970-01-01
  • 2018-09-05
  • 1970-01-01
  • 2015-10-16
  • 2023-03-06
  • 2013-02-20
  • 2011-07-31
  • 2010-12-23
相关资源
最近更新 更多