2011-12-21 31 views
3

据我所知在python我可以列表设置为唯一的列表,如:有没有像Python中设置的数组的一些方法?

In [12]: a=range(12) 

In [13]: a.append(5) 

In [14]: a.append(4) 

In [15]: a.append(5) 

In [16]: a 
Out[16]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 5, 4, 5] 

In [17]: set(a) 
Out[17]: set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) 

是,在某些场景非常有用, 我只是想知道如何将这个在JavaScript中,

+0

我非常高兴地推荐您在这里提问之前先搜索Google。 我谷歌搜索它,发现在Javascript中没有本地的“设置”。实现你自己的Set数据结构将很简单。 – 2011-12-21 05:45:31

+0

当我搜索时,问题出现在谷歌的顶部。 – 2016-09-20 21:16:59

回答

1

无,没有。 JS是非常基础的,你必须自己做或者找到一个其他人已经完成它的库。

执行此操作的标准方法通常是将元素插入散列,然后收集密钥 - 因为密钥保证是唯一的。或者,类似地,但保留顺序:

function uniq(arr) { 
    var seen = {}, result = []; 
    var len = arr.len; 
    for (var i = 0; i < len; i++) { 
    var el = arr[i]; 
    if (!seen[el]) { 
     seen[el] = true; 
     result.push(el); 
    } 
    } 
    return result; 
} 
1

Javascript没有集合的概念。但是,如this blog article about the topic所示,您可以使用副作用,即对象不能具有重复的属性名称以复制组的功能。

从文章:

var your_array = ['a', 'a', 'a', 'b', 'b'], 
    set = {}; 
for (var i = 0; i < your_array.length; i++) 
    set[your_array[i]] = true; 
list = []; 
for (var item in set) 
    list.push(item); 

编辑在2017年:这不再是真实的,JS得到集的支持!

empty_set = new Set() 
three_element_set = new Set([1, 1, 1, 2, 2, 3]) 
three_element_set.add(3) // still three element set 
相关问题