对象/数组方法:修改原始的还是创建新的?指导方针
Object/Array methods: Modify original or create new? Guidelines
在javascript中,我们有filter
和map
这样的方法,它们不修改原始数组,而是根据提供的函数创建一个新数组。
我们也有像sort
这样的方法来修改原始数组。
以上是ECMA标准的一部分。
我还在库或gist中看到定制的函数,它们不符合任何标准或最佳实践。
像shuffle
这样的东西,经常使用像Fisher–Yates
这样的算法,90%的时间修改原始数组,但偶尔会创建一个新数组。
像compress
这样的方法删除了数组中的holes
,同样经常修改原始数组,但有时会创建一个新数组。
因此,在调查unique
或removeDuplicates
时,我发现了3种可能性。
function unique(array) {
create newArray;
push unique values into newArray;
return newArray;
}
上面的代码创建了一个包含唯一值的新数组,而原始数组保持不变。
function unique(array) {
remove duplicates from original array;
return array;
}
上面的操作修改了原数组,并返回了对原数组的引用。
function unique(array) {
create removedArray;
remove duplicates from original array and push the removed elements into removedArray;
return removedArray,
}
上面的代码与前面的类似,只是它记录了删除的元素并将它们返回给我,有点像splice
。
这一切都让我想知道是否有任何标准或最佳实践,当它涉及到创建工作在对象或数组的方法?
我没有找到,它们存在吗?
如果不是,那么我知道这个问题可能会导致基于意见的答案,但这似乎是一个明智的问题?
ECMAScript语言规范5.1(2011)没有概述为什么某些方法修改原始对象,以及为什么其他方法不修改。
作为一个例子,它只概述了Array.prototype.map
(15.4.4.19)
map不会直接改变调用它的对象对象可能通过调用
callbackfn
而发生变异。
,但没有说明原因。
然而,对于确实修改原始对象的方法,在方法的一般描述之外似乎没有特别的注意。Array.prototype.sort
(15.4.4.11)定义中的一个例子:
数组中的元素已排序。
总结一下:
在原始对象未被修改的情况下,对其进行显式注释,而在原始对象被修改的情况下,不添加特别通知。因此,似乎有一个隐含的标准,这些方法修改原始对象,但没有明确的协议或规范。
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 为effect Composer创建GodRays效果过程
- 从javascript创建一个列表
- onkeyup无法动态创建多个文本区域
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何访问声音管理器2创建的声音对象
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- 使用Facebook live API创建实时视频对象时的隐私设置
- 在动态创建的元素上获取对特定选择器的引用
- 如何创建带有插槽的vue js组件预加载程序
- 如何在创建键时引用来自同一对象的键
- 如何创建JSON数组
- 从html创建一个指令,该指令按类名应用函数
- 使用Javascript创建测验页面
- 更改使用Chart.js创建的图表中的轴线颜色
- JavaScript名称空间和对象创建
- 如何创建指导用户使用 Web 应用程序的应用程序教程
- 对象/数组方法:修改原始的还是创建新的?指导方针
- 需要一些关于创建可编辑自定义输入的指导