如何在嵌套对象中查找指定键的所有值?附示例对象
提取嵌套对象中指定键的所有值
嘿,针对你给出的嵌套对象,要提取所有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
相关产品推荐
相关产品推荐

