2017-03-08 52 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()你的數組,並將字符串添加到設置。與具有不同引用的數組不同,這些字符串將被視爲相等。