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

将带键名对象内容推入数组时push返回undefined,求排查方案

问题分析与解决方案

你遇到的问题核心是遍历对象的方式不对——你的原始数据是一个以用户ID为键名的普通对象,不是数组,所以用普通数组式的for循环遍历,自然拿不到对应的用户数据,push进去的就都是undefined了。

下面给你两种简单的解决方法,直接就能得到你想要的userArray:

方法一:用Object.values()直接提取(推荐,ES6+)

这是最简洁的方式,Object.values()会直接返回对象所有属性值组成的数组,一步到位:

// 你的原始对象
const userObj = { 
  "1293818383": { "xp": 200, "level": 3, "name": "User 1" }, 
  "235489445527289867": { "xp": 300, "level": 1, "name": "User 2" }, 
  "123189273132": { "xp": 100, "level": 3, "name": "User 3" } 
};

// 直接转换为目标数组
const userArray = Object.values(userObj);
console.log(userArray);
// 输出:[{"xp":200,"level":3,"name":"User 1"},{"xp":300,"level":1,"name":"User 2"},{"xp":100,"level":3,"name":"User 3"}]

方法二:用for...in循环遍历(兼容旧环境)

如果你的运行环境不支持ES6语法,可以用for...in遍历对象的键名,再通过键名获取对应的用户对象:

const userObj = { 
  "1293818383": { "xp": 200, "level": 3, "name": "User 1" }, 
  "235489445527289867": { "xp": 300, "level": 1, "name": "User 2" }, 
  "123189273132": { "xp": 100, "level": 3, "name": "User 3" } 
};

const userArray = [];
for (const userId in userObj) {
  // 加上hasOwnProperty判断,避免遍历到原型链上的属性
  if (userObj.hasOwnProperty(userId)) {
    userArray.push(userObj[userId]);
  }
}
console.log(userArray);

为什么你之前的代码会得到undefined?

你之前的for循环应该是像遍历数组那样写的(比如for (let i=0; i<xxx.length; i++)),但你的原始数据是对象,没有数组的length属性,循环过程中根本没拿到有效的用户对象,所以push(i)进去的自然都是undefined啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:51:33