不可变的js - 创建或更新嵌套在地图中的列表

时间:2016-08-01 12:07:16

标签: javascript immutable.js

我必须修改系统以选择资产,以允许用户选择多个资产。目前,我们将一个资产ID添加到生产ID映射中,如下所示:

.setIn(['newRequest', 'productionAssets', action.productionId], action.assetId)

如何修改它以便我们创建一个新列表,如果它是第一个,或者如果不是第一个则附加?

2 个答案:

答案 0 :(得分:0)

我最终这样做了两轮。可能有一个更简洁的版本,但这可行

if (s.hasIn(['newRequest', 'productionAssets', action.productionId])) {
        return s
          .updateIn(['newRequest', 'productionAssets', action.productionId], (prodAssets) => prodAssets.push(action.assetId))            
      } else {
        return s
          .setIn(['newRequest', 'productionAssets', action.productionId], fromJS([action.assetId]))             
      }

答案 1 :(得分:0)

你可以这样做一个单行:

return s.updateIn(['newRequest', 'productionAssets', action.productionId], l => (l || List()).push(fromJS(action.assetId)));

这样,如果路径['newRequest', 'productionAssets', action.productionId]中的值为undefined,则可以使用List()初始化它,然后将push()新项目置于其中。如果列表确实如此已经存在,你只需要添加一个新项目。