Javascript Letter频率计数器问题



那里!我正在构建一个字母频率计数器,并希望它也能计算单词频率,问题是:我构建了代码,但无法使其工作。

我想要的是:输入:";帮我处理这个代码"输出应该是:;h〃;2;e":3;l":1."帮助":1;我":1.

以下是我的困境:

const button = document.getElementById("countButton");
button.addEventListener("click", function() {});

let counter = () => {
let typedText = document.getElementById("textInput").value;
typedText = typedText.toLowerCase().value;
typedText = typedText.replace(/[^a-z's]+/g, "");
for (let i = 0; i < typedText.length; i++) {
currentLetter = typedText[i];
const letterCounts = {};
if (letterCounts[currentLetter] === undefined) {
letterCounts[currentLetter] = 1;
} else {
letterCounts[currentLetter]++;
}
for (let letter in letterCounts) {
const span = document.createElement("span");
const textContent = `"${letter}": ${letterCounts[letter]}, `;
span.innerText = textContent;
const letters = document.getElementById("lettersDiv");
letters.appendChild(span);
}
}
}
<body>
<div id="entry">
<h1>Type your text:</h1>
<textarea rows="15" cols="60" id="textInput"></textarea>
<br />
<button id="countButton">Count frequency!</button>
</div>
<div id="lettersDiv"></div>
<div id="wordsDiv"></div>
</body>

我对您的代码做了一些更改。

  1. letterCounts对象移位到for循环之外
  2. typedText.toLowerCase().value中删除.value
  3. 每次点击按钮时清空lettersDiv,这样之前的计数就不会停留在那里
  4. for (let letter in letterCounts){...}环路置于for (let i = 0; i < typedText.length; i++) {...}环路之外

let counter = () => {
let typedText = document.getElementById("textInput").value;
typedText = typedText.toLowerCase();
typedText = typedText.replace(/s+/g, "");
document.getElementById("lettersDiv").textContent = "";
const letterCounts = {};

for (let i = 0; i < typedText.length; i++) {
let currentLetter = typedText[i];
if (letterCounts[currentLetter] === undefined) {
letterCounts[currentLetter] = 1;
} else {
letterCounts[currentLetter] = letterCounts[currentLetter] + 1;
}
}
for (let letter in letterCounts) {
const span = document.createElement("span");
const textContent = `"${letter}": ${letterCounts[letter]}, `;
span.innerText = textContent;
const letters = document.getElementById("lettersDiv");
letters.appendChild(span);
}
}
const button = document.getElementById("countButton");
button.addEventListener("click", counter);
<body>
<div id="entry">
<h1>Type your text:</h1>
<textarea rows="15" cols="60" id="textInput"></textarea>
<br />
<button id="countButton">Count frequency!</button>
</div>
<div id="lettersDiv"></div>
<div id="wordsDiv"></div>
</body>

试试这个:

const button = document.getElementById("countButton");
button.addEventListener("click", function() {counter()});

let counter = () => {
let typedText = document.getElementById("textInput").value;
typedText = typedText.toLowerCase();
typedText = typedText.replace(/[^a-z's]+/g, "");
const letterCounts = {};
for (let i = 0; i < typedText.length; i++) {
currentLetter = typedText[i];
if (letterCounts[currentLetter] === undefined) {
letterCounts[currentLetter] = 1;
} else {
letterCounts[currentLetter]++;
}
}
for (let letter in letterCounts) {
const span = document.createElement("span");
const textContent = `"${letter}": ${letterCounts[letter]}, `;
span.innerText = textContent;
const letters = document.getElementById("lettersDiv");
letters.appendChild(span);
}
}

最新更新