por ejemplo: "themselves" , "Themselves" o " THEMSelveS " (tenga en cuenta los espacios iniciales y finales), deben contarse como themselves: 3
Mi código:
const { readFile, readFileSync } = require('fs'); let file = 'C:\Users\eeroj\source\repos\Nodejs\pish\pish'; function countRepeatedWords(sentence) { let words = sentence.split(" "); let wordMap = {}; for (let i = 0; i < words.length; i++) { let currentWordCount = wordMap[words[i]]; let count = currentWordCount ? currentWordCount : 0; wordMap[words[i]] = count + 1; } const sortedEntries = Object.entries(wordMap).sort(([a,], [b,]) => a.localeCompare(b)); const sortedWordMap = Object.fromEntries(sortedEntries); return sortedWordMap return wordMap; } words = readFileSync(file).toString(); console.log(countRepeatedWords(words));Puede usar la función toLowerCase() :
let words = sentence.split(" "); let wordMap = {}; for (let i = 0; i < words.length; i++) { const key = words[i].toLowerCase(); let currentWordCount = wordMap[key]; let count = currentWordCount ? currentWordCount : 0; wordMap[key] = count + 1; } También le sugiero que use for of loop, elimine las celdas vacías , defina todo como const y use Nullish coalescing :
const words = sentence.split(" ").filter(word => word); // returns if word isn't empty const wordMap = {}; for (let word of words) { const key = word.toLowerCase(); const currentWordCount = wordMap[key]; wordMap[key] = (currentWordCount ?? 0) + 1; }Convierte cada palabra a minúsculas con los toLowerCase() y trim() .
for (let word of words) { word = word.trim().toLowerCase(); wordMap[word] = (wordMap[word] ?? 0) + 1; }Notas:
.trim() , también podría simplemente dividir uno o más espacios: let words = sentence.split(/ +/) .Map en lugar de un objeto o al menos usar Object.create(null) para no mezclar sus datos con propiedades integradas.