无需使用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
相关产品推荐
相关产品推荐

