3

This should be really straightforward but i haven't got it to work.

var Set = require("collections/set");

function User() {
    this.name = 'something';
}

var clients = new Set();

var a = new User();
var b = new User();
clients.add(a);
clients.add(b);

var arr = clients.toArray();
for (var user in arr) {
    console.log(user.name+' iterated');
}

Why am i getting:

undefined iterated
undefined iterated

What i want to get is:

something iterated
something iterated
user2105624
  • 45
  • 1
  • 1
  • 5

2 Answers2

6
var Set = require("collections/set");

function User() {
    this.name = 'something';
}


var clients = new Set();

var a = new User();
var b = new User();
clients.add(a);
clients.add(b);


var arr = clients.toArray();
for (var i=0;i<arr.length;i++) {
    console.log(arr[i].name+" iterated");
}
//something iterated
//something iterated
Sumeet
  • 8,914
  • 5
  • 36
  • 63
  • 1
    I do not need to require Set in NodeJS version 12. It was throwing an error when i did. It is available by default – AleksandarT Dec 19 '19 at 08:29
0

You need to use of instead of in in your for loop. in loops through fields on an object, which is why you get like 50 lines with the set object. of on the other hand will treat the target like an iterator and grab its contents like you would expect. Here is an example:

function User() {
    this.name = 'something';
}

var clients = new Set();

var a = new User();
var b = new User();
clients.add(a);
clients.add(b);

for (var user of clients) {
    console.log(user.name+' iterated');
}

(I am assuming that your collections/set thing is smart enough to expose the iterator symbol thing that makes it work)

david
  • 16,020
  • 4
  • 40
  • 57