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

如何访问嵌套对象中的字符串?求教统计南瓜字符串数量的方法

如何统计嵌套对象中值为'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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 17:03:13