如何将API返回的对象转为数组对象?解决forEach报错问题
解决对象无法使用forEach的问题并转换为目标数组
你遇到的TypeError: oldObj.forEach is not a function报错原因很明确:forEach是数组专属的迭代方法,而你定义的oldObj是一个普通的JavaScript对象,对象原型上并没有这个方法,所以直接调用会报错。
下面提供两种简洁的方案来实现你想要的对象转数组需求:
方案1:使用Object.keys() + forEach
先通过Object.keys()获取对象的所有键名组成的数组,再遍历这个数组来构建目标数组:
const oldObj = { Georgia : { notes: "lorem ipsum", lat: "32.1656", long: "82.9001" }, Alabama : { notes: "lorem ipsum", lat: "32.3182", long: "86.9023" } }; const desiredArray = []; // 获取对象的键名数组,再遍历 Object.keys(oldObj).forEach(stateName => { const stateData = oldObj[stateName]; desiredArray.push({ name: stateName, notes: stateData.notes, lat: stateData.lat, long: stateData.long }); }); console.log(desiredArray); // 输出目标格式数组
也可以用对象展开语法简化代码:
Object.keys(oldObj).forEach(stateName => { desiredArray.push({ name: stateName, ...oldObj[stateName] // 展开对应属性 }); });
方案2:使用Object.entries() + map(更优雅)
Object.entries()会直接将对象转换为[键名, 属性对象]的二维数组,搭配map方法可以一步生成目标数组,代码更简洁:
const oldObj = { Georgia : { notes: "lorem ipsum", lat: "32.1656", long: "82.9001" }, Alabama : { notes: "lorem ipsum", lat: "32.3182", long: "86.9023" } }; const desiredArray = Object.entries(oldObj).map(([name, data]) => ({ name, ...data })); console.log(desiredArray);
这种写法的优势是不需要额外声明空数组,直接通过map的返回值得到结果,更符合函数式编程的风格。
兼容性说明
Object.keys()支持所有现代浏览器及IE9+;Object.entries()支持现代浏览器及Node.js 8.0+,如果需要兼容IE,优先选择方案1。
内容的提问来源于stack exchange,提问作者Daniel Smith
相关产品推荐
相关产品推荐

