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
相关产品推荐
相关产品推荐

