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

tim*_*ger 7 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])
Run Code Online (Sandbox Code Playgroud)

它对某些场景非常有用,我只是想知道如何在javascript中,

Int*_*ang 8

Javascript 没有集合的概念。但是,您可以使用对象不能具有重复属性名称这一事实的副作用来复制集合的功能,如有关该主题的博客文章中所见。

从文章:

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);
Run Code Online (Sandbox Code Playgroud)

2017 年的编辑:这不再是真的,JS 得到了支持!MDN 文档

empty_set = new Set()
three_element_set = new Set([1, 1, 1, 2, 2, 3])
three_element_set.add(3) // still three element set
Run Code Online (Sandbox Code Playgroud)


Ama*_*dan 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;
}
Run Code Online (Sandbox Code Playgroud)