在redux store

时间:2016-08-14 19:18:15

标签: reactjs angular redux ngrx

在我的商店中,我有多个id列表,它们引用了规范化的实体。 它看起来像这样:

{
  list1: [ 1 ], 
  list2: [], 
  //other lists
  entities: {
    1:{data},
     ... 
 } 
}

用户可以编辑项目,并可以选择项目应该在哪个列表中。如果用户在编辑时更改了列表,我无法找到将项目从一个列表移动到另一个列表的优雅方式。 要移动项目,我必须从旧列表中删除item-id并将其添加到新列表中。

在将ID写入新列表后,如何从旧列表中删除ID?查看Id的每个列表,如果发现删除它似乎有点不对我。

修改

进一步解释我的用例: 可以有n个列表,例如日期,例如" 08-17-2016"其中的项目是事件。用户可以更改事件的日期,因此事件需要从一个日期移动到另一个日期。

1 个答案:

答案 0 :(得分:0)

我只需使用Array.prototype.filter并与Array.prototype.indexOf一起检查此ID存在于哪个列表中:

function moveOrAdd(idToMove, list) {
  if (list.indexOf(idToMove) > -1) {
    // idToMove was in list so remove
    return list.filter(id => id !== idToMove);
  } else {
    // idToMove wasn't in list so add it
    return [...list, idToMove];
  }
}

// your store then, assuming an array of id to move or delete
[1, 2, 3 ... 2000].forEach(
  index => {
    {
      list1: [...moveOrAdd(index, list1)],
      list2: [...moveOrAdd(index, list2)],
      /// etc...
    }
  }
);