在此处跟随Dan Abramov的教程:https://egghead.io/lessons/javascript-redux-normalizing-the-state-shape
他似乎没有解释用一个待办事项ID(allIds)数组维护一个额外的reducer的好处,只是让一个byId reducer和用户Object.keys或Object.values进行迭代会不会更容易在上面吗?
答案 0 :(得分:0)
示例Todo应用程序按创建顺序显示待办事项列表。不可能以保证使用Object
和Object.keys
跨浏览器的方式来检索该有序列表。
JS Object
属性是无序的,但是数组具有顺序。因此,不能保证Object.keys()
的输出顺序与添加键的顺序有任何关系。通过该数组,reduce可以按照待添加的待办事项显示待办事项。
理论上you could use a Map
,因为Map
中的键是有序的。但是,无法重新排序Map
的内容。使用数组,您可以重新排列ID的顺序,而无需触摸待办事项对象本身。
换句话说,与Object
和Map
相比,数组数据结构更适合存储有序列表。