2015-03-26 5 views
1

Я хочу создать set из value objects в JavaScript. Проблема в том, что в JavaScript равенство основано на идентичности. Таким образом, два разных объекта с одинаковым значением будет рассматриваться как неравные:Наборы и вычисления JavaScript

var objects = new Set; 
 

 
objects.add({ a: 1 }); 
 
objects.add({ a: 1 }); 
 

 
alert(objects.size); // expected 1, actual 2

Как вы решить эту проблему?

+3

См http://stackoverflow.com/questions/27094680/user-defined-object-equality-for-a-set-in-harmony- es6 – elclanrs

+0

@elclanrs Единственная проблема с этим - накладные расходы, связанные с строкой и анализом данных. –

+0

В одной из моих библиотек у меня есть собственная реализация Map, которая по крайней мере совместима с API. Я просто использую метод 'toString', как функция, которая позволяет обрабатывать массивы (примитивов) как кортежи. Конечно, это не работает из-за предметов. –

ответ

3

Использование JSON.stringify:

var objects = new Set; 
 

 
objects.add(JSON.stringify({ a: 1 })); 
 
objects.add(JSON.stringify({ a: 1 })); 
 

 
alert(objects.size);