Search code examples
javascriptobjectreferenceset

Javascript Set Object Adding


Why this code output of both are different as adding objects in set make compare references? Code 1

let list = [ {a:1,b:1},{a:2,b:3},{a:3,b:1} ]

let set = new Set(list);

let newList = [{a:1,b:2},{a:3,b:1}];
set.add(...newList)

let newFilteredList = [...set]
console.log(newFilteredList)

Code 2

let list = [ {a:1,b:1},{a:2,b:3},{a:3,b:1} ] 
let newList = [{a:1,b:2},{a:3,b:1}];
let employees = [...list, ...newList]
let set = new Set(employees)

let newFilteredList = [...set]

console.log(newFilteredList)

Code 1:

(4) [{...}, {...}, {...}, {...}]
0 : (2) {a: 1, b: 1}
1 : (2) {a: 2, b: 3}
2 : (2) {a: 3, b: 1}
3 : (2) {a: 1, b: 2}
[[Prototype]] : []

Code 2:

(5) [{...}, {...}, {...}, {...}, {...}]
0 : (2) {a: 1, b: 1}
1 : (2) {a: 2, b: 3}
2 : (2) {a: 3, b: 1}
3 : (2) {a: 1, b: 2}
4 : (2) {a: 3, b: 1}
[[Prototype]] : []

Solution

  • Set#add() does not accept variable number of arguments. .set(...newList) just adds the first item because the method has a single parameter.

    const set = new Set();
    
    set.add(1, 2, 3, 4, 5);
    
    console.log(set.size);