Angular 对于使用零索引中的空数据点填充不可变映射的循环

Angular 对于使用零索引中的空数据点填充不可变映射的循环,angular,immutable.js,ngrx,Angular,Immutable.js,Ngrx,我正在使用ngrx store with immutable来处理angular 2应用程序中的数据。我有一个减速机,将成功的API调用中的数据转换为不可变存储的id到对象的映射:sessions:map。要从action.payload中的本机数组ISession[]进行转换,我将在调用中执行foreach循环: case SessionsActions.LOAD_SESSIONS_SUCCESS: return state.withMutations(map => { ma

我正在使用ngrx store with immutable来处理angular 2应用程序中的数据。我有一个减速机,将成功的API调用中的数据转换为不可变存储的id到对象的映射:
sessions:map
。要从
action.payload中的本机数组
ISession[]
进行转换,我将在调用中执行foreach循环:

case SessionsActions.LOAD_SESSIONS_SUCCESS:
  return state.withMutations(map => {
    map.set('loading', false);

    action.payload.forEach((session: ISession) => {
      console.log("Setting ",session);
      map.setIn(['sessions', session.id], session );
    });
  }) as ISessions;
我得到了预期的控制台输出,共有四项:

Setting  Object {id: 6, payslip: null, invlice: null, paidByClient: false, completed: false…}
Setting  Object {id: 8, payslip: null, invlice: 1, paidByClient: true, completed: false…}
Setting  Object {id: 9, payslip: 1, invlice: 1, paidByClient: true, completed: false…}
Setting  Object {id: 7, payslip: null, invlice: null, paidByClient: false, completed: false…}
但是存储区中填充了10项,它将id从0填充为null,直到数据本身存储的最大值(9):


知道为什么会发生这种行为吗?

我通过手动构建地图并使用
set
而不是
setIn
来设置它,从而解决了这个问题:

  case SessionsActions.LOAD_SESSIONS_SUCCESS:
  var state = state.withMutations(map => {
    map.set('loading', false);

    var sessions = Map<String, ISession>();
    for (var i = 0; i < action.payload.length; i++)
    {
      var session = action.payload[i];
      sessions = sessions.set(session.id, session );
    }
    map.set('sessions', sessions);
  }) as ISessions;
case sessionactions.LOAD\u SESSIONS\u成功:
var state=state.with突变(map=>{
map.set('loading',false);
var sessions=Map();
对于(var i=0;i
我假设这是
with mutations
函数的一些bug