2017-01-06 143 views
1

比较阵列中的唯一项目编辑: faintsignal提供的链接是最适用的答案。它不仅解释了为什么会发生这种情况,而且为解决所述问题提供了解决方案。使用Set

我有一个数组,我想确定是否所有元素都等于单个值。下面的代码看起来应该可以工作,但它不会。谁能解释一下?

var array1 = ['foo', 'bar', 'baz']; 
var array2 = ['foo', 'foo', 'foo']; 

//I expect this to be false and it is 
new Set(array1) == new Set(['foo']); 

//I expect this to be true and it is not 
new Set(array2) == new Set(['foo']); 

任何信息将不受欢迎!

+5

可能重复[为什么两个相同的对象不相等?](http://stackoverflow.com/questions/11704971/why-are-two-identical-objects-not-equal-to-each-其他),这里是一个[如何比较](http://stackoverflow.com/questions/201183/how-to-determine-equality-for-two-javascript-objects),也链接在重复 – baao

+0

它doesn'如果你有两个完全相同的对象,那么'object1 == object2'只有在它们确实是*完全相同的对象*时才会计算为真。 – Santi

+0

您正在比较对象,并且它们与您认为应该的方式不同。看看[这里](http://stackoverflow.com/questions/201183/how-to-determine-equality-for-two-javascript-objects) – Noelkd

回答

1

检查,如果集合的大小是:

new Set(array2).size === 1 

至于其他的答案/评论已经提到,

new Set(array2) == new Set(['foo']) 

返回假的,因为不同的对象是不相等的。

您可以理论上使用注释中引用的问题中的技术来检查new Set(array2)new Set(['foo'])的等价性,但您不需要这样做,因为检查大小是否正好符合您的需要。

+0

他的根本问题是**不**检查设置相等。他想检查数组中的所有元素是否相同。检查设定的平等只是他解决问题的一个想法。检查设置大小是否正好是检查数组中所有元素是否相同的方法。 –

+1

我真的很抱歉,你是对的。直到现在我还没有得到根本的问题,但实际上它正是你所描述的...... – baao