如何不使用Object.keys()实现提取对象键的JavaScript函数?
问题描述
我在一项教学作业上卡了两天,需要寻求帮助。我要编写一个名为keys的函数,在不使用Object.keys()的情况下返回对象中所有键的数组。我能轻松将内容转为字符串,也能用Object.values()输出内容,但现在想只提取键(当前返回键值对,如A:1,我只需要ABC),返回类似['A', 'B', 'C']的数组。
以下是我尝试的代码:
function keys(json) { var obj = JSON.parse(json); //My code starts here const keys = Object.values(obj); keys.toString(); for (const [key] of Object.Entries(obj)) { return(key); } //My code ends here }
测试输入有三个:
- 第一个输入:
{"a":"1","b":"2","c":"3"}
- 第二个输入:
{"first":"Matt","last":"Lane"}
- 第三个输入:
{}
问题分析与修正
你的代码存在几个关键问题:
Object.Entries拼写错误,正确写法是小写开头的Object.entries- 循环内直接
return(key)会让函数在第一次循环就结束,只能返回第一个键,无法收集所有键 Object.values(obj)和keys.toString()这两行没有实际作用,不会影响最终结果
这里提供两种可行的实现方案:
方案一:使用for...in循环(基础实现)
通过遍历对象属性,并用hasOwnProperty确保只收集对象自身的键(避免获取原型链上的属性),最终将所有键存入数组返回:
function keys(json) { const obj = JSON.parse(json); const result = []; for (const key in obj) { if (obj.hasOwnProperty(key)) { result.push(key); } } return result; }
方案二:使用Object.entries遍历
如果题目仅禁止Object.keys(),可以利用Object.entries遍历键值对,只提取键并收集:
function keys(json) { const obj = JSON.parse(json); const result = []; for (const [key] of Object.entries(obj)) { result.push(key); } return result; }
测试结果
- 输入
{"a":"1","b":"2","c":"3"},返回['a', 'b', 'c'] - 输入
{"first":"Matt","last":"Lane"},返回['first', 'last'] - 输入
{},返回[]
内容的提问来源于stack exchange,提问作者Mikey K
相关产品推荐
相关产品推荐

