2017-01-06 85 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