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

如何将嵌套对象转为对象数组 解决map()方法调用报错问题

报错原因

接口返回的是键为数字索引字符串的普通对象,不是JavaScript标准数组类型,没有继承Array.prototype上的map方法,直接调用就会抛出Home.jsx:39 Uncaught TypeError: users.map is not a function错误。
原始接口返回结构如下:

{
  "0": {
    "name": "Rohan"
  },
  "1": {
    "name": "Meghan"
  },
  "2": {
    "name": "Rita"
  }
}
转换实现

最简便的实现方式是使用Object.values(),该方法会提取对象所有自有可枚举属性的值,按数字索引的升序返回标准数组,完全匹配你需要的目标结构:

// 此处users为接口返回的原始对象
const arrOfarr = Object.values(users)

如果需要兼容不支持Object.values()的老旧运行环境,可以换用Object.keys()配合map实现,效果完全一致:

const arrOfarr = Object.keys(users).map(indexKey => users[indexKey])

转换后得到的arrOfarr结构和目标要求完全匹配:

[
  {
    "name": "Rohan"
  },
  {
    "name": "Meghan"
  },
  {
    "name": "Rita"
  }
]
注意事项
  • 不推荐直接用for...in循环遍历对象做转换,这种方式会遍历到原型链上的继承属性,容易引入脏数据。上述两种官方API只会提取对象自身的可枚举属性,安全性更高。
  • 如果接口存在返回格式不稳定的情况,可以加一层类型判断兜底,避免再次触发类型错误:
const arrOfarr = Array.isArray(users) ? users : Object.values(users)
  • 转换完成后就可以正常对arrOfarr调用map、filter、forEach等所有数组实例方法。

内容的提问来源于stack exchange,提问作者Rohan Routh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:09:13