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

JavaScript中如何直接获取数组嵌套对象的values子键(无需循环)

提取嵌套对象的键(无需手动for循环)

嘿,我懂你想要避开手动写for循环的想法,其实JavaScript有内置的方法能轻松搞定这个需求,不用自己写循环逻辑~

首先你之前的写法d.values."key"是行不通的,因为这里的键是动态的,而且我们需要提取所有键,不是单个特定键。下面给你几个简洁的方案:

方案1:用flatMap + Object.keys

这是最简洁的写法,flatMap会帮我们把每个元素的键数组合并成一个一维数组:

const array = [{key: "6S", values: { 3: [{Id: "1234a"}, {Id: "1234b"}]}}, {key: "7S", values: { 5: [{Id: "1534a"}], 4: [{Id:"1534a"}]}}];

const extractedKeys = array.flatMap(item => Object.keys(item.values));
console.log(extractedKeys); // 输出: ["3", "5", "4"]

Object.keys(item.values)会返回当前values对象的所有键组成的数组,flatMap则自动把这些子数组合并成一个大数组,省去了手动处理嵌套的麻烦。

方案2:兼容旧环境的写法(map + concat)

如果你的运行环境不支持flatMap(比如一些旧浏览器),可以用map配合扩展运算符和concat来实现同样的效果:

const extractedKeys = [].concat(...array.map(item => Object.keys(item.values)));
console.log(extractedKeys); // 同样输出: ["3", "5", "4"]

这里array.map会先返回一个二维数组[["3"], ["5", "4"]],扩展运算符...把二维数组展开成多个参数传给concat,最终合并成一维数组。

可选:把键转成数字类型

注意Object.keys返回的是字符串类型的键,如果需要数字类型,可以再加一层map(Number):

const numericKeys = array.flatMap(item => Object.keys(item.values).map(Number));
console.log(numericKeys); // 输出: [3, 5, 4]

这些方法都是利用JavaScript的内置数组方法来替代手动for循环,代码更简洁易读,也符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:58:32