2016-07-27 83 views
8

假設有一個目的:Immutable.js推入陣列中嵌套的對象

const object = { 
    'foo': { 
    'bar': [1, 2, 3] 
    } 
} 

我需要推動4object.foo.bar陣列。

現在我在做這樣的:

const initialState = Immutable.fromJS(object) 
const newState = initialState.setIn(
    ['foo', 'bar', object.foo.bar.length], 
    4 
) 
console.log(newState.toJS()) 

但我真的不喜歡它,因爲我需要在路徑中使用object.foo.bar.length。在我的真實例子中,對象嵌套得更深,並且數組的長度看起來非常難看。還有另一種更方便的方法嗎?

回答

2

我使用seamless-immutable,當我加入新的項目,以嵌套的對象的數組,我出現此錯誤:

The push method cannot be invoked on an Immutable data structure.

我的數組仍然有push方法,但它不起作用。解決的辦法是使用CONCAT代替,在#43更多的細節:

initialState.updateIn(['foo', 'bar'], arr => arr.concat([4])); 

希望這有助於!

+0

同樣的問題在這裏,是有道理的,因爲push修改了不可變的數據結構是不可能的。 – Lucas