JavaScript支持集合(Sets)吗?

8

Javascript是否支持集合(仅包含唯一对象的列表)?

我找到了这个链接,但据我所知,JS中的foreach不是每个浏览器都支持。

5个回答

6

你的键是字符串吗?

每个JavaScript对象都是一个映射,这意味着它可以表示一组。

如您提到的页面所示,每个对象只接受每个键(属性名称)的一个副本。键/属性的值并不重要。


1
你链接的文章和第01页链接的是同一页。 - badp
谢谢澄清,我刚才发现那篇文章很难读,所以我试图猜测他的意思:P - IAdapter

4

jshashtable 可以让您将任何对象存储为键,并使用与您提供的链接相同的模式。此外,它还提供了一个获取键数组的方法,然后您可以对其进行迭代。它还具有良好的跨浏览器支持,因此应该很好地适应任何环境。


谢谢提供链接,我也找到了那个,但如果我可以使用地图来完成,那么就不需要使用外部库了。 - IAdapter
一个映射表对于非字符串对象来说不能直接使用,这也是 jshashtable 的意义所在。 - MattJ
如果不清楚的话,可以下载jshashtable中提供的HashSet包装器:http://code.google.com/p/jshashtable/downloads/detail?name=jshashset.js&can=2&q=#makechanges - Tim Down

2
现在有了ES6(和类似corejs的polyfills / shims),您可以使用它们: Set - JavaScript | MDN 例如:

var mySet = new Set([1, 2, 3, 2, 1]);  // => [1, 2, 3]
console.log(mySet.size);
console.log(mySet.has(3));
mySet.forEach(function(x){console.log(x)});

Polifill是必需的,因为它不受旧版浏览器支持,所以如果您只针对最新版本的浏览器,则可以忽略它。

0

你可能还记得 Array.forEach(),但它在旧版 Opera 和所有 IE 浏览器中都不被支持。而 for (var x in ...) 则是据我所知 JS 的“本地”部分,并且被所有浏览器支持。


0

JavaScript 支持 Set。这里是到 canIuse 网站的链接。它被 Chrome、Edge、Safari、Firefox、Opera 甚至 IE 支持。要声明 set,你可以使用 Set() 构造函数。

let set = new Set();
set.add("John);

通过这种方式,您可以使用集合。


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