我不清楚在Javascript中Set和Array之间的区别是什么(除了Set在ES6中是新的)。为什么要使用Set而不是Array或Object定义。
为什么要介绍Set?
答案 0 :(得分:14)
集合中的每个值都必须是唯一的,但在数组中,您可以按照您的喜好推送相同的值。
"设置对象是值的集合。您可以按插入顺序遍历集合的元素。 Set中的值只能出现一次;它在Set的系列中是独一无二的。" https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set
有趣地删除值,在处理少量数据时,两者之间的性能差异不大(数组和设置),但是当您开始处理大数据时,删除速度要快得多in Sets vs Arrays。
向Array添加值比将其添加到设置快4倍。
迭代值数组在这里也表现更好(根据数据量呈指数增长)。
您可以阅读有关性能差异的更多信息; Javascript Set vs. Array performance
"在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个重复项目到组合集合,添加到数组中检查重复值并跳过if复制花了74毫秒,只需使用set.add(值)就花了9毫秒。
您何时需要?
我想到的一个现实生活中的例子是,如果你有一封电子邮件营销信,例如你会有选择; - 电视 - 音乐 - 电影 - 体育
有一天,您的客户或您希望只有一个电子邮件,音乐和电影的电子邮件选项,称为"娱乐"。您需要根据这3个不同值中的数据构建新集合,并且您需要确保每封电子邮件仅添加到新的娱乐电子邮件列表中一次。意味着如果用户对两者都感兴趣,用户可以选择加入电影和电视。
在这里你可以设置娱乐,然后遍历所有列表TV / Music / Movies并使用Entertainment.add(电子邮件),该套装将负责跳过列表中已存在的值。因此,避免在电子邮件列表中重复发送电子邮件。
同时设置将是存储您的电子邮件订阅者地址的最佳格式,因为没有人可能会意外地为您的电子邮件选择两次。