2016-06-08 73 views

回答

13

發生這種情況的原因是密鑰'selector'具有非映射值。如果我們確保爲'selector'值也是一個不變的地圖 setIn將工作:

var map1 = Immutable.Map({ 'selector': Immutable.Map({ 'type': 'bar' })}); 
 
var map2 = map1.setIn(['selector', 'type'], 'foo'); 
 
console.log(map1.toJS()); 
 
console.log(map2.toJS());
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>

爲JavaScript對象和數組深深轉換爲地圖和列表,你可以使用fromJS()。所以,你可以更容易地寫出:

var map3 = Immutable.fromJS({ 'selector': { 'type': 'bar' }}); 
 
var map4 = map3.setIn(['selector', 'type'], 'foo'); 
 
console.log(map3.toJS()); 
 
console.log(map4.toJS());
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>

+0

所以,如果我有,我想修改我不得不遞歸手動映射嵌套的每一層嵌套很深的對象?這看起來有點麻煩,tbh。 – hally9k

+0

這是爲了說明。您可以使用['fromJS()'](https://facebook.github.io/immutable-js/docs/#/fromJS)將JavaScript對象和數組深度轉換爲地圖和列表。 – 1983

相關問題