有没有像python中设置的数组方法?
Posted
技术标签:
【中文标题】有没有像python中设置的数组方法?【英文标题】:is there some method of array like set in python? 【发布时间】:2012-01-25 00:18:28 【问题描述】:据我所知,在 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 中做到这一点,
【问题讨论】:
我强烈建议您在此处提问之前先搜索 Google。我用谷歌搜索了一下,发现 Javascript 中没有原生的“Set”。实现自己的 Set 数据结构会很简单。 我搜索的时候这个问题在google的顶部。 【参考方案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 得到了支持! MDN Docs
empty_set = new Set()
three_element_set = new Set([1, 1, 1, 2, 2, 3])
three_element_set.add(3) // still three element set
【讨论】:
【参考方案2】:不,没有。 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;
【讨论】:
【参考方案3】:使用 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_权威指南,大卫弗拉纳根-(2020)
【讨论】:
【参考方案4】:Firefox 13+ 提供了集合的实验性实现。 link.
【讨论】:
【参考方案5】:聚会很晚,但从 ECMAScript 2015 开始,mquandalle's answer 中提到的“experimental implementation”不再是实验性的,而是标准的一部分。 Browser compatibility
【讨论】:
以上是关于有没有像python中设置的数组方法?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Kentico Kontent 的对象数组未按 CMS 中设置的顺序呈现