You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:37:42