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

无需使用Object.entries()实现对象键值对数组函数却返回undefined的问题排查

问题分析与解决方案

我来帮你梳理下函数出现问题的原因,以及对应的修复方案:

主要问题点

  • 函数缺少返回语句:你在entries函数中创建了result数组,但没有通过return将它返回出去。JavaScript中,函数如果没有显式返回值,默认会返回undefined,这就是你调用函数后输出undefined的直接原因。
  • 不必要的键类型转换:原需求要求保留对象键的原始类型(比如示例中的"a"是字符串,测试用例里的"1"也是字符串),但你的代码里用了Number(key)强制转换键的类型——这不仅不符合需求,遇到非数字类的键(比如"a")还会得到NaN,完全偏离预期结果。

修正后的代码

function entries(obj) {
  var result = Object.keys(obj).map(function(key) {
    // 直接使用原始key,不做类型转换
    return [key, obj[key]];
  });
  // 关键:返回处理后的结果数组
  return result;
}

// 测试示例用例
var obj1 = { a: 1, b: 2, c: 3 };
console.log(entries(obj1)); // 输出:[["a",1], ["b",2], ["c",3]]

// 测试你的数字字符串键用例
var obj2 = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};
console.log(entries(obj2)); // 输出:[["1",5], ["2",7], ["3",0], ..., ["12",0]]

补充说明

这个修正后的函数逻辑和Object.entries()的行为一致:仅遍历对象的可枚举自有属性,并将每个键值对转换为[键, 值]格式的子数组,最终返回二维数组。如果需要处理不可枚举属性或者继承属性,可以改用Object.getOwnPropertyNames()或者Reflect.ownKeys(),但这通常不是常规需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:06:02