如何将对象数组(Array of Objects)转换为对象的对象(Object of Objects)?
将对象数组转换为以索引为键的对象
输入数组
[{id:1, name: 'Hana', age: 30}, {id:2, name: 'Sana', age: 20}, {id:3, name: 'Kana', age: 30}]
目标格式
{0:{id:1, name: 'Hana', age: 30}, 1:{id:2, name: 'Sana', age: 20}, 2:{id:3, name: 'Kana', age: 30}}
实现方法
方法1:使用Object.fromEntries(ES2019及以上)
这是最简洁的实现方式,通过map将数组元素与索引组成键值对数组,再用Object.fromEntries转换为对象:
const arr = [{id:1, name: 'Hana', age: 30}, {id:2, name: 'Sana', age: 20}, {id:3, name: 'Kana', age: 30}]; const result = Object.fromEntries(arr.map((item, index) => [index, item])); console.log(result);
方法2:使用Array.reduce
通过累加器逐步构建目标对象,兼容性比Object.fromEntries稍好:
const arr = [{id:1, name: 'Hana', age: 30}, {id:2, name: 'Sana', age: 20}, {id:3, name: 'Kana', age: 30}]; const result = arr.reduce((acc, item, index) => { acc[index] = item; return acc; }, {}); console.log(result);
方法3:普通for循环
适合需要兼容低版本JS环境的场景:
const arr = [{id:1, name: 'Hana', age: 30}, {id:2, name: 'Sana', age: 20}, {id:3, name: 'Kana', age: 30}]; const result = {}; for (let i = 0; i < arr.length; i++) { result[i] = arr[i]; } console.log(result);
以上三种方法都能得到你需要的目标对象,可根据项目的JS环境选择合适的方案。
内容的提问来源于stack exchange,提问作者emma
相关产品推荐
相关产品推荐

