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

如何不使用Object.values()获取对象值?已实现无Object.keys()取键

不使用Object.values()获取对象值的解决方案

方法一:基于你熟悉的for...in循环修改

你之前写的获取键名的逻辑很清晰,要获取值其实只需要在循环里通过键名访问对象的对应属性即可,不需要直接替换循环变量名:

function values(json) {
    var obj = JSON.parse(json);
    let result = [];
    for (const key in obj) {
        // 通过obj[key]拿到当前键对应的value,再推入结果数组
        result.push(obj[key]);
    }
    return result;
}

你之前直接把key换成value没用,是因为for...in循环遍历的本来就是对象的键名,循环变量存的是键,要拿到值必须用对象[键名]的方式来访问。

方法二:正确使用map函数

你尝试用map的思路没问题,但代码里有几个明显错误:

  1. 函数名应该是values而非keys,避免语义混淆;
  2. map的回调函数参数中,第二个参数是数组索引,不是对象的值;
  3. map会自动生成并返回新数组,不需要手动往values里push,只需在回调中返回目标值即可。

修正后的代码:

function values(json) {
    var obj = JSON.parse(json);
    // 先通过Object.keys拿到所有键名,再用map遍历每个键,返回对应的value
    return Object.keys(obj).map(key => obj[key]);
}

简单说下map的用法:它会遍历目标数组(这里是Object.keys(obj)返回的键名数组),对每个元素执行回调函数,把回调的返回值收集起来形成新数组。所以这里只要返回obj[key],就能得到所有值组成的数组。

额外提醒

for...in会遍历对象原型链上的可枚举属性,如果只想要对象自身的属性,可以加个判断:

for (const key in obj) {
    if (obj.hasOwnProperty(key)) {
        result.push(obj[key]);
    }
}

如果是JSON解析出来的普通对象(没有自定义原型),这个判断可以省略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:37:33