Redux/React 状态规范化 - 为什么要维护一个单独的 ID 数组?

Redux/React state normalization - why maintain a separate array of IDs?

在此处按照 Dan Abramov 的教程进行操作:https://egghead.io/lessons/javascript-redux-normalizing-the-state-shape

他似乎没有解释使用一组待办事项 ID (allIds) 维护一个额外的 reducer 的好处,如果只有一个 byId reducer 和用户 Object.keys 或 Object.values 迭代它?

示例待办事项应用显示待办事项列表,按创建顺序排列。无法使用 ObjectObject.keys.

以保证跨浏览器工作的方式检索该有序列表

JS Object 属性是无序的,但是数组是有顺序的。因此 Object.keys() 的输出顺序不能保证与添加键的顺序有任何关系。该数组允许 reducer 按添加顺序显示待办事项。

理论上 you could use a Map,因为 Map 中的键是有序的。但是,无法对 Map 的内容重新排序。使用数组,您可以重新排序 ID,而无需触摸待办事项本身。

换句话说,数组数据结构比ObjectMap更适合存储有序列表。