Функция getWordCnt
возвращает массив с вложенными парами ключ / значение, где уникальный ключ представляет слово, а значение определяет количество появлений слова:
function getWordCnt(text) {
return Object.entries( // converts an object to an array of [key, value] pairs
text
.toLowerCase()
.split(/\W+/) // splits the text where it matches the regexp
.filter(line => !!line) // removes elements with empty strings (the last element here)
.reduce((acc, el) => { // returns an object which represents word:count pairs
acc[el] = acc[el] + 1 || 1
return acc
}, {})
)
}
let text = "Hello World, hello Sun!"
const words=getWordCnt(text) // [ [ "hello", 2 ], [ "world", 1 ], [ "sun", 1 ] ]
Вы можете манипулировать им дальше через деструктурирование , например:
const strings = words.map(
([key, value]) => `The word '${key}' appears ${value} time(s)`
)
console.log(strings) // [ "The word 'hello' appears 2 time(s)", "The word 'world' appears 1 time(s)", "The word 'sun' appears 1 time(s)" ]