JS如何将日期键对象组成的数组转换为以日期为键的单个对象
数组转日期键对象的最优实现方案
原代码直接调用
Object.fromEntries(arr)无法得到预期结果,原因是Object.fromEntries要求入参数组的每个元素为[键, 值]格式的二元数组,而当前输入数组的每个元素是仅包含单个日期键的独立对象。
推荐实现
方案1:reduce 单次遍历实现(优先推荐)
仅需一次数组遍历即可完成转换,性能最优,兼容性覆盖ES2015+所有运行环境:
const arr = [ {"2021-08-26": { selected: true }}, {"2021-08-27": { selected: true }}, {"2021-08-28": { selected: true }} ]; const expected = arr.reduce((acc, cur) => Object.assign(acc, cur), {}); console.log(expected);
实现逻辑:
- 初始化累加器为空对象
{} - 遍历数组时把当前的单个键对象直接合并到累加器中
- 遍历结束后返回的累加器就是预期结构
方案2:基于Object.fromEntries实现
如果偏好使用Object.fromEntries,可以先做一层格式转换,该方案需要两次数组遍历,兼容性要求ES2017+:
const expected = Object.fromEntries( arr.map(item => Object.entries(item)[0]) );
实现逻辑:
- 先通过
map遍历把每个单个键对象转为[日期字符串, {selected: true}]格式的二元数组 - 再传入
Object.fromEntries生成目标对象
内容的提问来源于stack exchange,提问作者lecham
相关产品推荐
相关产品推荐

