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

如何在嵌套对象中查找指定键的所有值?附示例对象

提取嵌套对象中指定键的所有值

嘿,针对你给出的嵌套对象,要提取所有pin键的值,我给你准备了一个简单直观的递归方案,用JavaScript就能轻松实现:

首先先把你的嵌套对象补全(完善了Feb-2018的省略部分方便测试):

const nestedObj = {
  "PINS": {
    "2017": {
      "Nov-2017": {
        "VJkRWX7pTSl_5w1Np": { "pin": "6K3jP5vLyN", "say": "Hello" },
        "MsdsXiO9G9mwM3Qa": { "pin": "hnPKh7ywvT", "say": "Hello" }
      },
      "Dec-2017": {
        "Mm35Gjb-nY0k2TV": { "pin": "xWwaNNE2XG", "say": "Hello" },
        "WzajCLEJmJHmzg0": { "pin": "vMU1mKbZAi", "say": "Hello" }
      }
    },
    "2018": {
      "Jan-2018": {
        "Wf8E1unVaOh03a43": { "pin": "qXJCQREATD", "say": "Hello" },
        "JZqP8fVCLSja6J82v": { "pin": "o5D8S8Lvtb", "say": "Hello" }
      },
      "Feb-2018": {
        "ExampleKey1": { "pin": "abc123XYZ", "say": "Hello" },
        "ExampleKey2": { "pin": "def456UVW", "say": "Hello" }
      }
    }
  }
};

接下来是核心的递归函数,它会自动遍历对象的每一层,收集所有匹配指定键的值:

function getAllValuesByKey(obj, targetKey) {
  let result = [];
  // 遍历当前对象的所有自身属性
  for (const key in obj) {
    if (obj.hasOwnProperty(key)) {
      const value = obj[key];
      // 如果当前值是对象(排除null),递归深入处理
      if (typeof value === 'object' && value !== null) {
        result = result.concat(getAllValuesByKey(value, targetKey));
      } 
      // 如果当前键就是目标键,把对应值加入结果数组
      else if (key === targetKey) {
        result.push(value);
      }
    }
  }
  return result;
}

现在调用这个函数提取所有pin值:

const allPins = getAllValuesByKey(nestedObj, 'pin');
console.log(allPins);

最终输出的结果会是:

["6K3jP5vLyN", "hnPKh7ywvT", "xWwaNNE2XG", "vMU1mKbZAi", "qXJCQREATD", "o5D8S8Lvtb", "abc123XYZ", "def456UVW"]

小提示

用递归的原因是你的对象是多层嵌套结构,它能自动适配任意深度的层级,不管后续嵌套层数怎么变化,这个函数都能正常工作。如果用普通循环的话,得手动处理每一层,灵活性差很多。另外加obj.hasOwnProperty(key)的判断,是为了避免遍历到对象原型链上的无关属性,保证只处理对象自身的属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:25:46