2015-01-09 18 views
2

有沒有一種方法可以將數組用作javascript Set中的值?使用數組值的Javascript集合

實施例:

s = new Set() 
s.add([1,2]) 
s.has([1,2]) // -> false 
s.add(1) 
s.has(1) // -> true 

據推測,因爲它看起來在引用,而不是陣列中的實際值與所述陣列的情況下,返回false。有沒有辦法做到這一點,使s.has([1,2])返回true

回答

1

您可以使用json作爲鍵。

s = new Set() 
s.add(JSON.stringify([1,2])) 
s.has(JSON.stringify([1,2])) // true 
+0

這有效,但我只是稍等一下,看看在接受它之前是否有其他想法。更具體地說,我很好奇,是否有類似於python的'tuple'類,它是通過值而不是引用傳遞的。 –

1

你必須要小心這裏,因爲Set.has參照比較對象(這裏數組),所以它應該是這樣的:

var a = [1,2]; var s = new Set([a]); s.has(a); // -> true

,將工作,但我會wrap用我自己的原型設置,不重複每次遍歷集合:

  function compareByValue(pool, needle){ 
       var search = []; 
       pool.forEach(function(value) { 
        search.push(value.toString()); 
       }); 
       return search.indexOf(needle.toString()) !== -1; 
      } 
      compareByValue(s, [1,2]); // -> true 
+0

沒錯,但我想按價值檢查。 –