JavaScript的类似Java的Set集合

9

我需要一个与Java中的Set类似的API的集合。

这个实现:

http://jsclass.jcoglan.com/set.html

需要使用RequireJS,这让我的Java头脑目前过于扭曲。
发布一个作为Set功能的函数会是一个很好的答案。或者提供一个Google Set或其他一些已经创建了这个代码的技术巨头的链接。
谷歌的Closure怎么样?名字让我感到困惑,但是它有一个set。
1个回答

10

在我看来,无论是什么 java.util.Set 可以实现的功能,都可以使用简单的 JavaScript 对象来完成。我不明白为什么你需要额外的库:

// empty set
var basket = {};

// adding object to set    
basket['apple'] = true;
basket['banana'] = true;
basket['orange'] = true;
basket['apple'] = true;

// iterating through set contents, should print:
// apple
// banana
// orange
for(var fruit in basket)
  console.log(fruit);

// check if an element exist
if(basket['pineapple']) {
  console.log('has pineapple');
} else {
  console.log('no pineapple');
}

// remove element from set
delete basket['apple'];

我本来就想评论这个问题。我只想补充一下,Set类只是一个数据结构。在JavaScript中自己创建它非常简单。我很困惑为什么会有人问这个问题哈哈。 - Andy
@Andy - 对于我们这些被Java和Java库以及JavaDoc宠坏的人来说,上面的内容并不是那么显而易见。这一切都取决于你的视角。(这在这个留言板上经常被忽视<<无意冒犯>>)。 - Guido Anselmi
2
对于一个真正的集合,如果其中的内容是不能或不应该使用Object.toString转换为常量字符串的对象,则会变得更加复杂。在Python中,我使用set比使用数组更多,我真的很想念它。我想Python的集合也不是真正的集合,它们是由其值的内存地址隐式索引的哈希表,但至少我不必自己管理键或哈希函数。我仍然没有找到一个我真正喜欢的解决方案。 - Dan Ross
1
使用库的原因是不必担心实现细节和边缘情况。 此外,还有一些很好的功能,例如Java的Set可以让您知道您添加的对象是否已经在集合中。 - Ed Norris

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