javascript - 什么时候(如果有的话)你会在 Javascript 中使用 splice 而不是 slice?(最佳实践)
问题描述
我一直在学习函数式编程概念。我读过的核心概念之一是限制修改外部变量的函数数量的重要性,以避免以后出现意外的潜在错误。考虑到这一点,我一直在阅读的材料建议使用 slice over splice 作为 slice 输出一个新数组而不修改现有数组,其中 splice 将修改现有数组。
考虑到你可以用 slice 做所有你可以用 splice 做的事情(考虑到它需要几行额外的代码),你什么时候会使用 splice over slice 来修改数组?我想知道我应该考虑在哪些场景中使用 splice 方法。我的主要考虑是在处理大型数组时调用 splice 可能会提高内存或 CPU 效率,因为它只是删除了值而不必存储 " before" 和 "after" 变量包含数组的两个部分,围绕您要删除的值,然后将它们连接在一起。此外,听起来使用切片可能会导致更多的内存和 CPU 效率低下,并且会变得更加糟糕,数组越大(使用的计算能力增加的线性函数)。但,也许我的考虑是错误的,或者还有其他我没有想到的情况。任何反馈都非常受欢迎。我只是想更深入地了解“纯函数”(不修改外部变量的函数)概念何时不适用或不是最佳用途。
这是一个示例,说明我如何看待 slice 在功能上能够做任何 splice 可以做的事情:
array = [1,2,3,4,5];
//using the splice method
array.splice(3,1);
// array is now [1,2,3,5]
//using the slice method
function replaceSplice(arr){
let sliceBefore = arr.slice(0,3);
let sliceAfter = arr.slice(4);
let modifiedArray = sliceBefore.concat(sliceAfter);
}
replaceSplice(array);
// returns a new array called modifiedArray with the values [1,2,3,5]
解决方案
使用.slice
,您将创建数组的两个副本,然后将它们合并。这不是非常理想.splice
的,另一方面可以与底层数组实现一样快。
此外,一般来说,即使有替代方法,也最好有方法按照他们所说的去做。两者.slice
都.splice
可以使用简单的for
循环重新实现,但两者都可以用于各种目的。
推荐阅读
- vue.js - 如何找到自定义 Vue 组件的定义位置?
- node.js - 无法从其他机器访问 localhost:3000
- android - 屏幕关闭时,后台的相机预览出现错误
- python - 从python文件访问json中的嵌套字典
- android - Android DataBinding 显示合并字符串与空检查不起作用
- ruby-on-rails - 在 Rails 表单字段中使用 select2 的选定选项值
- javascript - Validators.pattern 未显示手机号码错误
- vue.js - 无法运行 vue 命令
- amazon-web-services - 在 Cloudformation 中使用参数值作为键
- python - OSError:libusb-1.0.so:无法打开共享对象文件:在 readthedocs 中构建文档时没有这样的文件或目录