Объект Set добавляет одинаковые объекты
Как правильно работать с объектами при использовании Set?
Ниже пример кода от которого ожидалось, что дублирования не будет:
let ret = new Set();
let a = {name:'', value:''};
let b = {name:'', value:''};
a.name = 'a';
a.value = 123;
ret.add(a);
b.name = 'a';
b.value = 123;
ret.add(b);
console.log(ret);
От этого кода, что будет два объекта в Сете:
<script>
let ret = new Set();
let a = {name:'', value:0};
a.name = 'a';
a.value = 123;
ret.add(a);
a.name = 'b';
a.value = 123;
ret.add(a);
console.log(ret);
</script>
Ответы (1 шт):
Автор решения: Andrei
→ Ссылка
Сделать так как вы хотите не выйдет. Потому что не бывает два или более одинаковых объекта. Если у одного человека две руки и у другого две руки это не значит что это одинаковые люди, это разные личности, то есть разные объекты. Если Вы сделаете вот так:
const mySet = new Set();
mySet.add({'a': 1, 'b': 2});
mySet.add({'a': 1, 'b': 2});
for (let item of mySet){
console.log(item);
}
В Set будет два объекта потому что они похожи но не одинаковы. Можно сравнивать только значения объектов, а не сами объекты.
<script>
let ret = new Set();
let a = {name:'', value:0};
a.name = 'a';
a.value = 123;
ret.add(a);
a.name = 'b';
a.value = 123;
// Здесь в Set объект не добавлялся
// так как он там уже есть, а в Set
// хранятся только уникальные данные
ret.add(a);
console.log(ret);
</script>
Отработало все вот так:
let ret = new Set();
let a = {name:'', value:0};
a.name = 'a';
a.value = 123;
ret.add(a);
a.name = 'b';
a.value = 123;
for (let item of ret){
console.log(item);
}