【问题标题】:What is wrong with this recursion function?这个递归函数有什么问题?
【发布时间】:2016-07-14 23:54:22
【问题描述】:

我正在尝试使用递归计算对象中的字符串数,包括嵌套对象和数组中的字符串。为什么我得到 3 而不是 7;

function strCount(obj, count = 0){
  for (var key in obj) {
    if (typeof obj[key] === 'object') {
      strCount(obj[key], count);
    } else if (typeof obj[key] === 'string') {
      count++;
    }
  }
  return count;
}

var myobj = {
  first:  "1",
  second: "2",
  5: 'sd',
  third:  false,
  fourth: ["anytime",2,3,4],
  fifth:  null,
  sixth:  undefined,
  seventh:{ ana: 'hell', did: 5, boo : 'foo', har : ['kill', 5]}
};

alert(strCount(myobj));

【问题讨论】:

  • 你递归调用strCount,但忽略了它的返回值。
  • 如果这是您的想法,它不会增加调用者范围内的count 变量。每个调用都有自己的count

标签: javascript function recursion


【解决方案1】:

别忘了将递归调用的结果添加到count

function strCount(obj) {
  var count = 0;
  for (var key in obj) {
    if (typeof obj[key] === 'object') {
      count += strCount(obj[key]);
    } else if (typeof obj[key] === 'string') {
      count++;
    }
  }
  return count;
}

var myobj = {first:"1",second:"2",5:'sd',third:false,fourth:["anytime",2,3,4],fifth:null,sixth:undefined,seventh:{ana:'hell',did:5,boo:'foo',har:['kill',5]}};

alert(strCount(myobj));

【讨论】:

    【解决方案2】:

    您应该将第 4 行更改为 count = strCount(obj[key], count);

    function strCount(obj, count = 0) {
      for (var key in obj) {
        if (typeof obj[key] === 'object') {
          count = strCount(obj[key], count);
        } else if (typeof obj[key] === 'string') {
          count++;
        }
      }
      return count;
    }
    
    
    
    var myobj = {
      first: "1",
      second: "2",
      5: 'sd',
      third: false,
      fourth: ["anytime", 2, 3, 4],
      fifth: null,
      sixth: undefined,
      seventh: {
        ana: 'hell',
        did: 5,
        boo: 'foo',
        har: ['kill', 5]
      }
    };
    
    alert(strCount(myobj));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多