我一直在想出一个对这个练习的答案,但是在那里我看不到它。我将分享练习的描述,我的代码和最后的输出。使用Javascript计算字符串的频率字母
描述:
现在我们要拯救每个数组的长度最长的一个新的数组称为array_lengths
打开控制台,并重新加载索引页看到代码的结果。
编写一个函数charFreq(),该函数接受一个字符串并构建其中包含的字符的频率列表。
作为一个条件,你必须使用对象freqCounter。
将列出的频率表示为Javascript对象。用charFreq(“abbabcbdbabdbdbabababcbcbab”)来尝试。
CODE:
function charFreq(string) {
var array_lengths = [];
// compute frequencies of each value
for (var i = 0; i < string.length; i++) {
value = string[i];
if (value in array_lengths) {
array_lengths[value] ++;
} else {
array_lengths[value] = 1;
}
}
// make array from the frequency object to de-duplicate
var freqCounter = [];
for (value in array_lengths) {
freqCounter.push(value);
}
// sort the uniques array in descending order by frequency
function compareFrequency(a, b) {
return array_lengths[b] - array_lengths[a];
}
return freqCounter.sort(compareFrequency);
}
//OUTPUT:
// if I had it right I should get "true" from every of the following values of the function but the point is that I'm getting all false...where's the error?
counter = charFreq("abbabcbdbabdbdbabababcbcbab");
console.log(counter['a'] === 7);
console.log(counter.b === 14);
console.log(counter['c'] === 3);
字符串是一个字符串。你需要一个数组。做:arr = string.split(“”); –
你的问题是你正在返回一个有序数组'freqCounter',它只包含键值,而不包含值。如果您立即返回array_lengths,您的代码将是正确的。 – Marie
是的,谢谢玛丽! – Defoe