有没有像python中的set一样的数组方法?

时间:2011-12-21 05:41:59

标签: javascript list arraylist

正如我在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,

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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;
}

答案 2 :(得分:0)

Firefox 13+提供了集合的实验性实现。 link

答案 3 :(得分:0)

晚会很晚,但是从ECMAScript 2015开始,experimental implementation中提到的“ mquandalle's answer”已不再是实验性的,而是标准的一部分。 Browser compatibility

答案 4 :(得分:0)

使用Set()构造函数创建Set对象。 Set()构造函数的参数不必是数组:允许任何可迭代对象(包括其他Set对象)。

 let myArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 5, 4, 5]
 let mySet = new Set(myArray); //output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

另一个例子:

  let unique = new Set("Mississippi"); //output: [ "M", "i", "s", "p" ]

参考JavaScript_权威指南David Flanagan-(2020年)