Let’s talk about the fact that we have a array of objects with emails.

let emails = [{

from: "Galician Developer",

to: "admin@example.com",

text: "Posting daily javascript articles"

},

{

from: "Addy Osmani",

to: "admin@example2.com",

text: "Google Chrome doesnt work!"

},

{

from: "Umar Hansa",

to: "admin@example3.com",

text: "Shazam!!! Let work, we have no time"

}];

We want to add them to a read folder when we read them. If we delete an email we also want to delete it from the read folder.

How we can do it?

One solution would be, for example, to save the first element in other array and when we delete the first email also delete the first email read from this array.

let markAsReadFolder = []; markAsReadFolder.push(emails[0]); // Read the first email object console.log(markAsReadFolder);

// Output

{

from: "Galician Developer",

to: "admin@example.com",

text: "Posting daily javascript articles"

} emails.shift(); // Delete first object from emails

markAsReadFolder.shift(); // Delete first object from read folder console.log(markAsReadFolder);

// Output

[]

Other solution would be find the index of the first element than we are going to delete and then use splice().

let markAsReadFolder = []; markAsReadFolder.push(emails[0]); // Read the first email object console.log(markAsReadFolder);

// Output

{

from: "Galician Developer",

to: "admin@example.com",

text: "Posting daily javascript articles"

} let indexEmails = emails.indexOf(0);

emails.splice(indexEmails, 1); // Delete first object from emails let indexRF = markAsReadFolder.indexOf(0);

markAsReadFolder.splice(indexRF, 1); // Delete first object from folder console.log(markAsReadFolder);

// Output

[]

But the most simple option is,

new WeakSet( [iterable] );

This object have one argument (iterable)

iterable -> Optional. If an iterable object is passed, all of its elements will be added to the new WeakSet . null is treated as undefined.

So let´s create our WeakSet,

let markAsReadFolder = new WeakSet(); markAsReadFolder.add(emails[0]); // Read the first email object console.log("Have we read the first email? " + markAsReadFolder.has(emails[0])); // true emails.shift(); // Delete first object from emails console.log("Have we read the first email? " + markAsReadFolder.has(emails[0])); // false

As we can see when you delete the object in question from the array of emails is also deleted from our WeakSet.

The main differences to the Set object are

WeakSets are collections of objects only.

If an element object has no other reference left, it will be auto released to the garbage collector .

. For the previous reason you can´t iterate over objects inside of WeakSet.

over objects inside of WeakSet. For the previous reason you can´t know the size of the objects inside of WeakSet.

of the objects inside of WeakSet. You can only use .add(), .has() and .delete() methods with WeakSet.

Aren’t you sure about the garbage collector?

I’m going to share with you a small project in which you can see the differences in the garbage collector between the Set and the WeakSet.