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:
- Cree su propia abstracción Set / Map encima de Set / Map, que convertiría los objetos a un valor primitivo de acuerdo con su función de hash.
- Espere a que los objetos de valor entren en ES7 .
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
.