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

如何不使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:20:39