为什么集合的键等于值?

时间:2018-02-08 16:56:19

标签: javascript arrays set key

这本书

  

了解ECMAScript 6

说明

  

设置没有键。 ECMAScript 6背后的人   标准可以在forEach()的set版本中进行回调函数   接受两个参数,但这会使它与另一个不同   二。相反,他们找到了一种方法来保持回调函数相同   接受三个参数:集合中的每个值都被认为是关键和   值。因此,第一个和第二个参数总是相同的   forEach()on sets保持此功能与其他forEach()保持一致   数组和地图上的方法。

为什么不像在阵列中那样制作键?
这背后的动机是什么?

1 个答案:

答案 0 :(得分:2)

从某种意义上说,Set实际上确实有索引,如果不是键......

逻辑上,一个集合甚至没有定义的迭代顺序,更不用说密钥了。但事实是,new Set([1, 2, 3])的迭代次序与new Set([3, 1, 2])不同。

这是数学和编程之间的区别。

更新:通过评论讨论更新了问题

密钥/索引确实不应该存在。如果有合理的方法可以避免它,我认为他们会有。但是在编程中我们不能只说“集合s中的所有S ...”我们需要能够迭代那些s。但我们不应该寻找比这个迭代更多的东西。 new Set([1, 2, 3])new Set([3, 1, 2])尽可能地尽可能地相同。

想象一下,如果我们将Trie序列化以将集{'baby', 'bad', 'bank', 'box', 'dad', 'dance'}存储为(b(a(b(y)dn(k))o(x))d(a(dn(c(e)))))。根本没有指数。提供这些的唯一原因是使forEach尽可能保持各种类型的一致性。套装不适合其他套装。就是这样。

换句话说,重用该值(或者一致地传递一些不相关的令牌)比假装迭代索引是Set接口的有意义部分更有意义。订购是偶然的,实现细节,因为程序员不能使用数学技术。但它不是Set s。

的基本界面的一部分