【问题标题】:Lodash Clone Array vs Spread OperatorLodash 克隆数组与扩展运算符
【发布时间】:2020-03-01 07:20:24
【问题描述】:

我想知道是否有人知道传播运算符是否

cosnt newArray = [...oldArray];

制作lodash方法

const newArray = _.clone(oldArray);

过时了?

或者更重要的是,哪种方法更有效?

*注意这是一个浅层克隆,只需要一个新数组中的对象引用。

谢谢!

【问题讨论】:

  • 不会比 newArray = oldArray.slice()newArray = oldArray.concat() 已经过时了。
  • _.clone 不仅仅是克隆一个数组。如果您只想克隆一个数组,仅此而已,传播运算符是您的最佳选择。如果您要克隆数千个数组,每个数组都包含数千个元素(或每次击键时有数百个数组),那么您可能应该考虑性能。
  • 亚当,你能详细说明一下吗?

标签: javascript ecmascript-6 lodash clone


【解决方案1】:

_.clone 可用于其他数组以外的许多事物:

此方法大致基于结构化克隆算法,支持克隆数组、数组缓冲区、布尔值、日期对象、地图、数字、对象对象、正则表达式、集合、字符串、符号和类型化数组。自变量对象的可枚举属性被克隆为普通对象。对于错误对象、函数、DOM 节点和 WeakMaps 等不可克隆值,返回一个空对象。

相比之下,数组上下文中的展开语法仅适用于 iterable 对象(例如数组,以及具有Symbol.iterator 属性的某些其他集合),并且只会生成普通的数组。许多事情可以用_.clone 调用来浅层克隆它们,而这是数组传播无法完成的——例如普通对象。

(有object spread之类的东西可以浅拷贝对象,但是语法是漂亮新的)

要考虑的另一件事是浏览器兼容性 - 扩展语法需要 ES6 支持,而调用库方法 _.clone 则不需要。

【讨论】:

  • OP 明确指出只需要浅层克隆数组。
【解决方案2】:

看起来clone 比扩展运算符快:https://www.measurethat.net/Benchmarks/ShowResult/81691

但是,作为javascript in an expensive resource to process,添加一个库来完成vanilla js可以完美完成的事情可能不是一个好主意。

【讨论】:

  • 嘿,太棒了。我也从来不知道那个工具。谢谢!
  • 我想知道你在什么机器/浏览器组合上测试了这个,如果我重试你的基准测试,传播运算符在我的机器(iMac/Safari)上要快得多,请参阅:measurethat.net/Benchmarks/Show/6250/2/…
猜你喜欢
  • 2021-09-02
  • 2018-03-31
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 2018-07-29
  • 2019-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多