如何将以ID为键名的对象转换为含ID字段的对象数组?
解决对象转带ID字段数组的问题
我来帮你搞定这个转换问题!你遇到的undefined大概率是变量名不匹配导致的——你代码里用了resp[key],但你的源数据变量是idBasedObjects,这就会找不到对应值啦。下面给你几种简洁靠谱的转换方法:
方法1:ES6+ 用Object.entries + map(推荐)
这是最直观简洁的写法,ES6及以上环境都支持:
// 你的源数据 const idBasedObjects = { "-L8BpxbS70KYrZMQUF0W": { "createdAt": "2018-03-22T16:33:57+08:00", "email": "ss@ss.ss", "name": "ss" }, "-KYrZMQUF0WL8BpxbS70": { /* 其他数据 */ } }; // 转换逻辑 const convertedArray = Object.entries(idBasedObjects).map(([id, data]) => ({ id, // 把对象的键作为id字段 ...data // 展开原对象的所有属性 }));
Object.entries()会把对象转换为[键名, 对应值]的二维数组,再通过map遍历每一项,组合成你需要的带id字段的对象。
方法2:兼容旧环境用Object.keys + map
如果你的运行环境不支持Object.entries,可以用Object.keys先获取所有键名,再遍历:
const convertedArray = Object.keys(idBasedObjects).map(id => ({ id, ...idBasedObjects[id] }));
这个逻辑和上面类似,只是先拿到所有键名,再通过键名去源对象里取对应的数据。
为什么你之前的代码得到undefined?
你写的Object.keys(idBasedObjects).forEach(key => { console.log(resp[key]) })里,resp应该不是你的源数据变量——如果你的数据存在idBasedObjects里,应该改成console.log(idBasedObjects[key]),这样就能正确打印出每个对象的数据了。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

