Sets in JavaScript

Published

I was getting to know a code base I'll be working with a lot more in my new role as a development engineer at Points the other week, and I came across something I'd never seen before, a Set. I initially thought it might be part of lodash or something similar, but no. It is a global object in Javascript, and I didn't know anything about it!

Sets are similar to Arrays but with a main difference, a value in a set, be that a primitive or object ref, can only occur once it in it's set (I like to think of it as an array that ignores duplicate insertions). Take this as a basic example:

const fruit = new Set()
fruit.add('Apple')   // Set [ "Apple" ]
fruit.add('Apple')   // Set [ "Apple" ]
fruit.add('Pear')    // Set [ "Apple", "Pear" ]

fruit.size           // 2

fruit.has('Orange')  // false - Not in the set
fruit.has('Apple')   // true - Is in the set
fruit.delete('Pear') // true if deleted || false if not found

You can use the usual suspects when it comes to iteration methods too:

for (let [key, fruit] of fruit.entries()) {
  console.log(fruit);
}

This has been part of the spec for years and has very solid browser support. You can read more on the Set object, and a really comprehensive set of examples on the MDN Docs.