Javascript 动态不变映射更新

Javascript 动态不变映射更新,javascript,immutable.js,Javascript,Immutable.js,我正在使用Immutable,我发现当您想要更新一个不可变数据单元中的多个键时,会出现很多问题 现在,我正在执行这些操作以实现更新的对象 state.setIn(["user", "email"], action.payload.user.email) .setIn(["user", "pass"], action.payload.user.password) .setIn(["user", "pending"], action.meta.pend

我正在使用Immutable,我发现当您想要更新一个不可变数据单元中的多个键时,会出现很多问题

现在,我正在执行这些操作以实现更新的对象

state.setIn(["user", "email"], action.payload.user.email)
            .setIn(["user", "pass"], action.payload.user.password)
            .setIn(["user", "pending"], action.meta.pending)
            .setIn(["user", "username"], action.payload.user.name)
            .setIn(["user", "charity"], action.payload.user.charityOrganizationId)
            .setIn(["user", "avatar"], action.payload.user.avatarElementIds)
            .setIn(["user", "isAuthorized"], action.payload.user.isAuthorized);
它看起来不那么漂亮,我想创建一种方法,让我能够像这样处理它:

dynamicUpdate(immutableData, newDataCollection) {
  var res;
  for (var key in newDataCollection) {
   res = immutableData.setIn(["user", key], newDataCollection[key])
  }
  return res;
}

   var newState =  dynamicUpdate(ImmutableState, {
      email : "newEmail",
      pass : "newPass"
    })
可能吗?或者有其他方法可以做到这一点

我认为这会导致很大的内存问题,因为在每个设置中都会创建一个新的不可变映射。我读过关于基因突变的书,但我不明白如何使用它


谢谢你的帮助

只做
state.mergeDeep(fromJS(action.payload.user))
会容易得多。您可以控制有效负载对象的用户密钥,以便使所有密钥匹配,并让
mergeDeep
为您处理它。可能还有其他一些解决方案,但我发现这对于这些类型的用例非常有效,并且更容易阅读/键入/理解。非常感谢VanDanic!