DEV Community

Sets in JavaScript

Atta on June 12, 2019

This post was originally published on attacomsian.com/blog. A Set is a special type of object in ES6 that lets you create a collection of uniqu...
Collapse
 
jtenner profile image
jtenner

There is a lot of value when using a Set over an Array.

I learned yesterday that Set#has(item) performs an O(log n) algorithm to determine if the value exists in it. I was able to get a small speed increase in my javascript for it.

Good article!

Collapse
 
karataev profile image
Eugene Karataev

AFAIK, Set.has implementation in V8 is really fast - it has O(1) time complexity.

Collapse
 
jtenner profile image
jtenner

It's entirely possible I learned wrong! I took the statement at face value, knowing I couldn't verify it myself. If that's the case, then I'm really happy I use Set all the time now.

Collapse
 
karataev profile image
Eugene Karataev

Is it correct to say that Set is like array, but with unique items only and Map is like object where keys might be of any type (not limited to strings and symbols)?

Collapse
 
attacomsian profile image
Atta

Well Set might look like an array but there are some notable differences. Apart from unique values, sets have different ways for initializing, accessing / adding / removing values.

Collapse
 
perpetualwar profile image
Srđan Međo

Sets are also unordered lists of elements, unlike arrays.

Thread Thread
 
karataev profile image
Eugene Karataev

Why? We can use forEach method on Sets to iterate the collection by insertion order.

Thread Thread
 
perpetualwar profile image
Srđan Međo

Correct. Iteration is possible in the insertion order, but items are not indexed and they cannot be sorted unless converted to array beforehand. Maybe worth pointing out.

Thread Thread
 
karataev profile image
Eugene Karataev

Agree. Sets also don't have array methods like map/filter/reduce and others. I just don't use Set/Map in my daily work and always forget what data structure is used for. By comparing Set to Array and Map to Object I want to create a mental connection in my head to remember the purpose of these data structures without looking in documentation.

Collapse
 
maxmaxymenko profile image
Max Maxymenko

Man, love those Emojis 👌👀

Collapse
 
attacomsian profile image
Atta

🙏

Collapse
 
adam_cyclones profile image
Adam Crockett 🌀

Are set values unique, I can't remember, but if they are passing a string would be destructive, hello world would be helo wrd

Collapse
 
attacomsian profile image
Atta

Yes, Set values are unique. It will filter-out the duplicate characters if you pass a string to create a set.

Collapse
 
adam_cyclones profile image
Adam Crockett 🌀

So that's good for something I'm sure 😋