0

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

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

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

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

编辑:

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

4

1 回答 1

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...
    }
  }
);
于 2016-08-14T19:58:53.123 回答