如何访问嵌套对象中的字符串?求教统计南瓜字符串数量的方法
如何统计嵌套对象中值为'pumpkin'的字符串数量
嘿,我来帮你搞定这个问题!首先得说清楚你当前代码里的问题:你用'pumpkin' in patch这个写法,其实是在检查对象的键名是不是'pumpkin',而不是检查值——这就是为什么它没效果的原因!
要统计嵌套对象里特定值的数量,我们需要递归遍历整个对象结构,因为你的patch是多层嵌套的(比如hill.byTheBench又是一个对象)。下面是具体的实现方法:
解决方案代码
let patch = { meadow: { byTheRock: 'apples', byThePuddle: 'pumpkin' }, hill: { byTheBench: { leftOfBench: 'pumpkin', rightOfBench: 'pumpkin' }, topOfHill: 'apples' } }; function pumpkinPicker(patch) { let count = 0; // 遍历对象的所有值 for (const value of Object.values(patch)) { // 如果当前值是对象(排除null,因为typeof null也会返回'object') if (typeof value === 'object' && value !== null) { // 递归处理嵌套对象,把返回的计数累加 count += pumpkinPicker(value); } else if (value === 'pumpkin') { // 找到目标字符串,计数加1 count++; } } return count; } console.log(pumpkinPicker(patch)); // 输出:3
关键知识点解释
Object.values(patch):这个方法会返回对象所有属性的值组成的数组,让我们可以直接遍历值,不用关心键名- 递归遍历:因为对象是多层嵌套的,当遇到值还是对象时,我们调用自身函数继续深入遍历,直到找到最底层的字符串值
- 排除null:一定要加上
value !== null的判断,因为JavaScript里typeof null的结果是'object',如果不排除会把null当成对象处理,导致错误 - 字符串判断:当遍历到的值是字符串且等于'pumpkin'时,我们就把计数加1
如果你的对象里还可能出现数组(比如某个属性值是数组),可以在判断对象的地方加个数组的处理逻辑,比如:
if (Array.isArray(value)) { // 遍历数组元素,递归处理每个元素 for (const item of value) { count += pumpkinPicker(item); } } else if (typeof value === 'object' && value !== null) { // 处理普通对象 count += pumpkinPicker(value); }
这样就能覆盖更多嵌套场景啦!
内容的提问来源于stack exchange,提问作者Austn Kehrer
相关产品推荐
相关产品推荐

