2017-03-16 70 views
0

我有兩個深深嵌套的數據對象,使得:ImmutableJS在地圖設置與深比較

myMap.get("dataKey") === maybeNewData // false 
Immutable.is(myMap.get("dataKey"), maybeNewData) //maybe true 

我想maybeNewData更換myMap.get(「dataKey」),只有當一些嵌套值的改變。有沒有一種語法上精確的方法來做到這一點?例如(方法不存在):

const maybeNewMap = myMap.setIfDeepDifferent("dataKey", maybeNewData); 

還是我必須做這樣的?:

if (!Immutable.is(myMap.get("dataKey"), maybeNewData)) { 
    maybeNewMap = myMap.set("dataKey", maybeNewData); 
} 
+0

那麼你想要做的是深度比較? – Aron

+0

是的。我想完全或者完全不用數據。所以我不能使用myMap.deepMerge,例如。 – Brian

回答

0

我發現了一個解決方案,它是稍微好一點:使用update提供了場所在.is檢查:

const maybeNewMap = myMap.update("dataKey", (data) => { 
    return !Immutable.is(data, maybeNewData) ? maybeNewData : data; 
}); 

我仍然好奇,如果有表達這種更簡潔的方式。

+0

三元運算符? –

+0

這有點幫助(我更新了我的反應以反映這一點),但我更加好奇知道immutableJS是否提供了一個實用程序來在一行中執行此操作。 – Brian

+0

我認爲它不存在,因爲我們的假設是您正在使用Immutable.is進行等式檢查?只要你使用Immutable.is檢查平等的地方,這個更新大致就和只是在執行myMap.set相同嗎? –