Javascript immutable.js更新/设置复杂地图

Javascript immutable.js更新/设置复杂地图,javascript,immutable.js,Javascript,Immutable.js,假设我有一个不可变的映射: var testing = Immutable.fromJS({ state: { name: 'secret', elements: [ { id: 678, name: 'first' }, { id: 689, name: 'first' }, { id: 699, name: 'firs

假设我有一个不可变的映射:

var testing = Immutable.fromJS({
  state: {
    name: 'secret',
    elements: [
      {
        id: 678,
        name: 'first'
      },
      {
        id: 689,
        name: 'first'
      },
      {
        id: 699,
        name: 'first'
      }
    ]
  }
})
在状态中更改名称非常简单:

testing.setIn(['state', 'name'], 'new name')
但是如何更新其中一个
元素的名称呢

如果我要新建元素的索引,我可以这样做:

testing.setIn(['state', 'elements', 1, 'name'], 'new element index 1 name')
我一直在想,是否有可能在
keyPath
数组中插入某种过滤器,这样我就可以根据id匹配要更新的记录

testing.setIn(['state', 'elements', (something here that will pick right record based on id passed here), 'name'], 'new element index 1 name')
又名:


我可以使用findIndex()函数查找索引,并将其添加到我自己的索引中,但我一直在想,是否有更明智的方法来执行此操作?

我想我可能会这样做:

testing.getIn(['state', 'elements'])
  .map(element => element.get('id') === myId ? 
    element.update('name', name => 'New Name') : 
    element);
其思想是映射元素,只更新通过三元运算符的元素的名称


我不知道上面在
Immutable

中描述的任何东西,我想我可能会这样做:

testing.getIn(['state', 'elements'])
  .map(element => element.get('id') === myId ? 
    element.update('name', name => 'New Name') : 
    element);
其思想是映射元素,只更新通过三元运算符的元素的名称

我不知道上面在
Immutable
中描述过什么