如何递归返回包含每个字母的标签的对象?

时间:2016-05-12 22:08:27

标签: javascript recursion

例如:给定一个字符串,返回一个包含每个字母的标签的对象。  letterTally( '马铃薯'); // {'p':1,'o':2,'t':2,'a':1}

这是我到目前为止所做的,但它不起作用:

var letterTally = function(str, obj) {
  var length = str.length;
  var current = str.charAt(0);
  if (length === 0) {
    return obj;
  } else if (obj[current]) {
    obj[current] ++;
  } else {
    obj[current] = 1;
  }

  return letterTally(str.slice(1), obj);

};

2 个答案:

答案 0 :(得分:0)

您的功能正常工作。您根本没有正确调用它 - 它需要传递一个空对象作为第二个参数:

letterTally('potato', {})

<强>段

&#13;
&#13;
var letterTally = function(str, obj) {
  var length = str.length;
  var current = str.charAt(0);

  if (length === 0) {
    return obj;
  } else if (obj[current]) {
    obj[current] ++;
  } else {
    obj[current] = 1;
  }

  return letterTally(str.slice(1), obj);

};

document.write(JSON.stringify(letterTally('potato', {}), null, 2)); // {'p':1, 'o':2, 't':2, 'a':1}
&#13;
&#13;
&#13;

答案 1 :(得分:0)

无需递归作业,Array.prototype.reduce()的单个作业线理想情况就足够了。

var word = "potato",
   coded = word.split("").reduce((p,c) => {!!p[c] ? p[c]++ : p[c] =1; return p} ,{});
   
document.write("<pre>" + JSON.stringify(coded) + "</pre>");