我应该使用Angular.copy()还是_.clone()?

Cod*_*rer 47 underscore.js angularjs

我正在开发一个将Angular和Underscore都作为依赖项的项目.

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

在我看来,这些方法中的一种可能比另一种方法更快/更可靠/更健壮.

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

dan*_*paz 42

关于你的问题: angular.copy和_.clone是不同的.这不是一个更好的问题,而是@Kevin B在评论中所说的你需要的问题.

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

Angular.copy与Angular.extend

性能方面,我不确定哪个更好,但出于意见,我反对将库包含在任何角度应用程序的全局范围(下划线)中,因为通常这些东西都被写为角度模块.angular.copy/angular.extend在这种情况下会获胜.

浅/深复制:

很简单,如果对象只有原始字段,那么显然你会去浅层复制,但如果对象有对其他对象的引用,那么根据要求,应该选择浅拷贝或深拷贝.我的意思是,如果引用没有随时修改,那么深入复制是没有意义的.你可以选择浅拷贝.但是如果经常修改引用,那么你需要进行深层复制.同样没有硬性规定,这完全取决于要求.

资源

  • 提供的链接(Angular.copy与Angular.extend)不再起作用 (3认同)
  • “但是如果引用经常被修改,那么您需要进行深拷贝。” 我要说的是,如果对引用进行了修改,那么对深度还是浅度进行处理可能都很重要,但是如果没有进行修改,那么可能就无关紧要了。实际上,我想说的是,在修改引用的情况下,您通常会希望使用浅表副本。但是正如livepo所说,您需要根据具体情况决定。至于性能,一般而言,浅克隆应比深克隆快,尤其是对于深层数据结构。对于浅层结构,可能取决于库。 (2认同)
  • 我打赌你的答案现在在2016年会有所不同.你可以很容易地使用common或者使用依赖注入(而不是angular),并且可以访问下划线或lodash.在某些情况下,Lodash被发现比本机浏览器方法更快,例如Chrome中的_.forEach.在大规模数据应用中可能非常重要. (2认同)