如何在Redux中将对象格式的状态转换为数组?
将Redux的对象格式状态转换为数组
嘿,这个需求在处理Redux规范化状态时太常见了!你可以用几种简单的方式把byId里的post对象转换成数组,下面给你详细说:
方法一:使用Object.values()(推荐)
这是最简洁直接的方法,Object.values()会直接提取对象的所有值并返回一个数组:
const postsArray = Object.values(state.posts.byId);
执行后,postsArray就是包含所有post对象的数组,现代浏览器中会保留对象键的插入顺序,完全符合你的需求。
方法二:使用Object.keys() + map()
如果你需要兼容一些非常老的JavaScript环境(比如IE11及更早),可以用这种方式:先获取对象的所有键,再通过map遍历取出对应的值:
const postsArray = Object.keys(state.posts.byId).map(key => state.posts.byId[key]);
这个方法和上面的结果完全一致,只是多了一步遍历键的过程,兼容性更强。
额外小提示
如果你的业务场景需要把post的键(也就是id)额外绑定到数组元素上(虽然你的每个post已经自带id属性了),可以这样扩展:
const postsArray = Object.entries(state.posts.byId).map(([id, post]) => ({ ...post, // 若post已有id字段,这一步可省略,仅作示例 id: id }));
这样得到的数组元素会明确包含键对应的id,不过你的原数据里每个post已经有id字段了,所以这个可能不是必须的~
内容的提问来源于stack exchange,提问作者steve
相关产品推荐
相关产品推荐

