Lodash克隆数组 vs 扩展运算符

6
我想知道是否有人知道扩展运算符的使用方法。
cosnt newArray = [...oldArray];

使lodash方法成为可能。

const newArray = _.clone(oldArray);

过时了吗?

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

*注意这是一个浅克隆,只想在新数组中获取对象引用。

谢谢!


并不比 newArray = oldArray.slice()newArray = oldArray.concat() 更过时。 - Bergi
_.clone不仅仅是克隆一个数组。如果你只想克隆一个数组,那么使用扩展运算符就可以了。但是,如果你要克隆成千上万个包含数千个元素的数组(或者每次按键都有数百个数组需要克隆),那么你应该考虑性能问题。 - Adam Jenkins
亚当,你能详细说明一下吗? - Nathaniel Rink
2个回答

6

1
哇,太棒了。我也不知道那个工具呢。谢谢! - Nathaniel Rink
1
我想知道你在哪个机器/浏览器组合上测试了这个,如果我重新运行你的基准测试,展开运算符在我的机器(iMac/Safari)上明显更快,请参见:https://www.measurethat.net/Benchmarks/Show/6250/2/spread-operator-vs-lodash - Mark Hagers

1

_.clone可以用于许多除数组以外的东西:

该方法基于结构化克隆算法,并支持克隆数组、数组缓冲区、布尔值、日期对象、映射、数字、对象对象、正则表达式、集合、字符串、符号和类型化数组。参数对象的自有可枚举属性被克隆为普通对象。对于无法克隆的值(如错误对象、函数、DOM节点和WeakMaps),返回一个空对象。

相比之下,在数组上下文中使用扩展语法只能处理可迭代对象(如数组和某些其他具有Symbol.iterator属性的集合),并且只能生成普通数组。许多东西都可以使用_.clone进行浅克隆,但使用数组扩展无法实现,例如普通对象。

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


原帖明确指出只需要浅克隆一个数组。 - Mark Hagers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接