# What is the Set object and how does it work?

The **Set** object is an **ES6** feature that lets you store unique values, **primitives** or **object references**. A value in a Set can only occur **once**. It checks if a value exists in the set object using the **SameValueZero** algorithm.

We can make `Set`

instance using `Set`

constructor and we can optionally pass an `Iterable`

as the initial value.

```
const set1 = new Set();
const set2 = new Set(["a","b","c","d","d","e"]);
```

We can add a new value into the `Set`

instance using the `add`

method and since the `add`

returns the `Set`

object we can chain `add`

calls. If a value already exists in `Set`

object it will not be added again.

```
set2.add("f");
set2.add("g").add("h").add("i").add("j").add("k").add("k");
// the last "k" will not be added to the set object because it already exists
```

We can remove a value from the `Set`

instance using the `delete`

method, this method returns a `boolean`

indicating `true`

if a value exists in the `Set`

object and `false`

indicating that value does not exist.

```
set2.delete("k") // returns true because "k" exists in the set object
set2.delete("z") // returns false because "z" does not exists in the set object
```

We can check if a specific value exists in the `Set`

instance using the `has`

method.

```
set2.has("a") // returns true because "a" exists in the set object
set2.has("z") // returns false because "z" does not exists in the set object
```

We can get the length of the `Set`

instance using the `size`

property.

```
set2.size // returns 10
```

We can delete or remove all the elements in the `Set`

instance using the `clear`

.

```
set2.clear(); // clears the set data
```

We can use the `Set`

object for removing duplicate elements in an array.

```
const numbers = [1, 2, 3, 4, 5, 6, 6, 7, 8, 8, 5];
const uniqueNums = [...new Set(numbers)]; // has a value of [1,2,3,4,5,6,7,8]
```