我有一个问题,我生成了很多值,需要确保我只使用独特的值。 由于我正在使用节点js,使用--harmony标志,并且可以访问和声集合,所以我认为Set可能是一个选项。
我正在寻找的东西类似于以下示例:
'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
现在通常用另一种语言实现这一点,比如c#,我希望必须实现一个equals函数,以及一个用于Board和Piece的哈希码生成函数。因为我希望默认对象相等性基于引用。 或者使用特殊的不可变值类型(例如,scala中的case类)
有没有办法为我的对象定义相等来解决我的问题?
答案 0 :(得分:8)
有没有办法为我的对象定义相等来解决我的问题?
不,不是真的。有some discussion about this on the mailing list。结果是:
答案 1 :(得分:-2)
这将为您正在使用的构造函数执行此操作。
var sameInstance = function(obj1, obj2){
return obj2 instanceof ob1.constructor;
};
某些其他类型的对象可能需要不同的东西,但这应该可以满足您的需求。
以上是您在功能形式中所需要的。要使其与Set
一起使用,您必须继承Set
对象,并使用您自己的has
覆盖has
方法。