javascript ecmascript-harmony ecmascript-6

javascript - igualdad de objeto definida por el usuario para un conjunto en armonía(es6)



ecmascript-harmony ecmascript-6 (2)

¿Hay algún medio para definir la igualdad de mis objetos para resolver mi problema?

No en realidad no. Ha habido alguna discusión sobre esto en la lista de correo . El resultado es:

Tengo un problema en el que estoy generando muchos valores y necesito asegurarme de que solo trabajo con valores únicos. Como estoy usando el nodo js, ​​con el indicador --harmony, y tengo acceso a colecciones de armonía, decidí que un Set puede ser una opción.

Lo que estoy buscando es algo similar al siguiente ejemplo:

''use strict''; function Piece(x,y){ this.x = x this.y = y } function Board(width,height,pieces){ this.width = width this.height = height this.pieces = pieces } function generatePieces(){ return [ new Piece(0,0), new Piece(1,1) ] } //boardA and boardB are two different but equivalent boards var boardA = new Board(10,10,generatePieces()) var boardB = new Board(10,10,generatePieces()) var boards = new Set() boards.add(boardA) boards.has(boardB) //return true

Ahora, normalmente para lograr esto en otro idioma, digamos c #, esperaría tener que implementar una función igual, así como una función generadora de código hash para Board y Piece. Como esperaría que la igualdad de objetos predeterminada se base en referencias. O tal vez use un tipo de valor inmutable especial (por ejemplo, una clase de caso en scala)

¿Hay algún medio para definir la igualdad de mis objetos para resolver mi problema?


Esto lo hará para constructores como con lo que estás trabajando.

var sameInstance = function(obj1, obj2){ return obj2 instanceof ob1.constructor; };

Algunos otros tipos de objetos pueden necesitar algo diferente, pero esto debería estar bien para lo que necesita.

Lo anterior es lo que necesita en forma de función. Para que funcione con Set , deberá heredar el objeto Set y anular el método has con sus propios has .