为什么JS在Set中保留插入顺序?

时间:2019-04-01 17:09:05

标签: javascript ecmascript-6 set

随机试验JavaScript(ES6)并阅读其文档,我发现Set保持其元素的插入顺序。

我想知道这个决定的依据是什么?我一直认为集合是无序集合。需要更多的东西将导致实现成本更高,而在我看来,此功能几乎未使用。

1 个答案:

答案 0 :(得分:2)

有序集非常有用,例如:

unique_elements_in_order = [...new Set(some_array)]

在像python这样的“未排序集”语言中,您需要一个单独的OrderedSet实现才能起作用。

是的,从理论上讲,集合不是有序的,但是数学抽象(例如集合,函数,数字等)仅与我们在编程中使用的类似命名的对象切向相关。 Set只是一种特殊的数据结构,由语言设计者来定义其特定的属性,例如“集合按插入顺序”或“集合只能包含可哈希对象”等。

关于委员会的动机,一些谷歌搜索带来了this

  

马克·米勒:

     

2012年2月13日星期一22:31:28 PST

     

确定性有很多好处。 E以不确定性开始   迭代顺序,这会带来隐性通道危害。我最初改变了   确定性顺序仅仅是为了解决此漏洞。这样做后,我发现了它   有很多软件工程上的好处。例如,它变得容易得多   编写回归测试并通过重新执行来重现错误。在我的   实施中,它还具有较小的额外空间和时间成本。泰勒的   Waterken表显示即使我支付的较小的运行时成本也   

     

为了让我们不再介绍不确定性的另一个来源   不可估量的效率。让我们来衡量一下,如果成本结果是   毕竟很高,然后让我们重新考虑确定性。

我相信这完全可以回答您的问题(阅读整个主题,很有趣!)