Immutable.js Push into array in nested object

不羁岁月 提交于 2019-12-06 17:00:33

问题


Assume there is an object:

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

I need to push 4 to object.foo.bar array.

Right now I'm doing it like this:

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

But I don't really like it, since I need to use object.foo.bar.length in the path. In my real example object is nested much deeper, and getting array's length looks very ugly. Is there another, more convenient way?


回答1:


This should work

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

References:

  • https://immutable-js.github.io/immutable-js/docs/#/updateIn



回答2:


I'm using seamless-immutable, when I'm adding a new item to array of nested object, I got this error:

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

My array still has push method, but it doesn't work. The solution is use concat instead, more details on #43:

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

Hope this help!



来源:https://stackoverflow.com/questions/38610179/immutable-js-push-into-array-in-nested-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!