Javascript set vs array vs object definition



我不清楚 Set 和 Array 在 Javascript 中有什么区别(除了 Set 在 ES6 中是新的)。为什么要使用 Set 而不是 Array 或对象定义。

为什么引入 Set?

集合中的每个值都必须是唯一的,但在 Array 中,您可以根据需要多次推送相同的值。

"集合对象是值的集合。您可以按广告顺序循环访问集合的元素。集合中的值只能出现一次;这在系列的收藏中是独一无二的。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set

有趣的是,在处理少量数据时,删除值时,两者(数组和集合)之间的性能差异不大,但是当您开始处理大数据时,删除集合与数组的速度要快得多。

将值添加到数组比将它们添加到集合快 4 倍。

遍历值 Array 在这里也表现更好(根据数据量呈指数增长)。

您可以在以下位置阅读有关性能差异的更多信息; Javascript Set vs. Array 性能

"在 10k 个元素下,两个测试运行的时间相当(数组:16.6 毫秒,设置:20.7 毫秒),但在处理 100k 个元素时,该组是明显的赢家(数组:1974.8 毫秒,设置:83.6 毫秒),但这只是因为删除操作。否则,阵列会更快。我说不清为什么会这样。

计算对象集中的唯一项目 与对象写 https://github.com/anvaka/set-vs-object

TL:DR Set 几乎比 Object 快两倍。

为什么引入Set(我的猜测)?

有时您需要一种简单的方法来构建值集合,并且必须确保每个值都是唯一的。这给老式的检查数组是否有值,然后推送或跳过带来了很多开销。

我之前链接的性能帖子中没有涉及这种情况,但是对 10,000 个项目的数组进行快速实验,然后将 15 个项目(其中 5 个是重复项)添加到组合集合中,添加到数组中检查重复值并跳过如果重复则跳过它需要 74 毫秒,而仅使用 set.add(value) 进行设置需要 9 毫秒。

你什么时候需要这个?

我想到的一个现实生活中的例子是,如果您有一封电子邮件营销信,例如您可以选择; -电视 -音乐 -电影 -体育

有一天,您的客户或您只希望有一个用于电视,音乐和电影的电子邮件选项,称为"娱乐"。您需要根据这 3 个不同值的数据建立一个新的集合,并且您需要确保每封电子邮件仅添加到新的娱乐电子邮件列表中一次。这意味着如果用户对电影和电视感兴趣,他们可以选择加入电影和电视。

在这里,您可以设置娱乐,然后遍历所有列表电视/音乐/电影并使用Entertainment.add(电子邮件),该集合将负责跳过列表中已存在的值。因此,避免电子邮件列表中的重复电子邮件。

还设置了存储您的电子邮件订阅者地址的最佳格式,因为没有人会意外地为您的电子邮件选择两次。

基本上,set 用于唯一地存储元素,而在数组中,您可以复制元素。关于对象,在还需要存储有关每个元素的其他信息的用例中,您将选择对象而不是集合和数组。

例如:存储您的应用程序用户的信息,包括他们的姓名、电话号码、地址、电子邮件等。 然后在对象中,您可以定义一个键,比如电子邮件(或者您也可以创建一个唯一 ID),然后对象中的键将是电子邮件(或其他键),有关用户的其他信息将存储为属性。

最新更新