2017-03-08 48 views
0

我正在使用一个随机生成器来创建一个数字对,并且需要确定一个数字对是否先前已经出现。我想过使用Set(),但它似乎不工作。Javascript Set/WeakSet datastructures with objects/arrays

var a = [1, 2] 
var s = new Set(); 
s.add(a) //Set {[1, 2]} 
s.add([1, 2]) //Set {[1, 2], [1, 2]} 

我怀疑这是因为JS存储基准,而不是价值。有什么办法只存储一次数组/对,并根据值返回TRUE?

+1

你回答了你自己的问题。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set“通过Set对象,您可以存储任何类型的唯一值,无论是原始值还是对象引用。”这两个数组是唯一的参考。如果你再次尝试's.add(a);',它不会重新添加数组。 – TheJim01

回答

0

JavaScript检查与===是否相等。缺点是比较对象/数组/函数通常不那么简单。

如果格式一致,你可以使用一些丑陋的黑客:JSON.stringify()你的数组,并将字符串添加到设置。与具有不同引用的数组不同,这些字符串将被视为相等。