那里!我正在构建一个字母频率计数器,并希望它也能计算单词频率,问题是:我构建了代码,但无法使其工作。
我想要的是:输入:";帮我处理这个代码"输出应该是:;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>
我对您的代码做了一些更改。
- 将
letterCounts
对象移位到for循环之外 - 从
typedText.toLowerCase().value
中删除.value
- 每次点击按钮时清空
lettersDiv
,这样之前的计数就不会停留在那里 - 将
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);
}
}