例如:给定一个字符串,返回一个包含每个字母的标签的对象。 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);
};
答案 0 :(得分:0)
您的功能正常工作。您根本没有正确调用它 - 它需要传递一个空对象作为第二个参数:
letterTally('potato', {})
<强>段强>
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;
答案 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>");