2016-01-25 143 views
5

我想創建一個不可變的路徑集。在我的情況下,路徑只是一串字符串。假設我們有以下路徑。Immutable.Set.contains返回false

var paths = [["a"], ["a", "b", "c"]]; 

我再創建不可變set這樣

var selectedPaths = Immutable.Set(paths); 

雖然selectedPaths.first()回報["a"],我不明白爲什麼selectedPaths.contains(["a"])回報false

編輯: 嗯,我得到了一個答案,爲什麼會發生這種情況,但我仍然無法按照我的需要來工作。

SOLUTION:作爲@Alnitak指出的那樣,我解決了這個由路徑比較Immutable.List(["a"]),而不是一個簡單的數組

回答

1

根據the docs,不可變的使用Immutable.is()函數來執行的相等性檢查,但由於其他Immutable.*對象時.is()檢查僅執行「值比較」的檢查,而不是天然的JS陣列,爲此它進行「基準比較」檢查。

因此,嘗試將您的內部值存儲爲Immutable.List而不是作爲普通的JS數組。

+0

你可能會提供一個例? – XeniaSis

+0

對不起 - 我沒有適合測試'Immutable.js'代碼的環境。在猜測中,你必須使用'Immutable.List([「a」,「b」,「c」])''''''''''' – Alnitak

+0

它仍然返回'假' – XeniaSis

0

測試相等的兩個不同陣列的這種方式並不在Javascript,例如工作

["a"] == ["a"] // returns false 

我猜Immutable JS庫做了簡單的相等性檢查。不幸的是,你需要自己進行更廣泛的檢查。

+0

那麼,我該怎麼做才能獲得理想的迴應? – XeniaSis

+0

查看我的編輯 - 您需要手動執行平等檢查。我不確定你想要做什麼,但是如果你想減少設置,你可以運行一個過濾器操作並提供自己的函數來進行比較。看到這個問題,重點是JS中的數組相等性檢查:http://stackoverflow.com/questions/3115982/how-to-check-if-two-arrays-are-equal-with-javascript –