JS Как посчитать количество повторяющихся слов в строке?

столкнулся с проблемой и не могу ее решить. Необходимо ввести в текстовом редакторе строку и по нажатию на кнопку определить и вывести в alert() количество слов повторяющихся 2 раза.

Скажем в input будет введено да да нет ага угу ага - результат должен быть 2. Не подскажите как решить это дело? А то руки уже опускаются

<body>
<div style="text-align: center; align-items: center;">Задание 7</div>
<!-- <div id="res" style="text-align: center; align-items: center;"></div> -->
<input id="string" type="edit" style="margin: auto; display: block; margin-top: 10px;">
<button style="margin: auto; display: block; margin-top: 10px;" onclick="TwoString(document.getElementById(string).value)">Проверка</button>
<script>
    function TwoString() {
        // Не знаю как это решить
        let result = {};
        for (let i = 0; i < str.length; i++) {
            if (result[str[i]]) {
            return false;
            };
        result[str[i]] = true;
        }
    return true;
    }
</script>

Я нашел в инете и попробовал посчитать хотя-бы есть ли количество повторяющихся символов, а после сделать счетчик. После думал по этой аналогии сделать счетчик повторяющихся слов. Но ничего не работает( Подскажите пожалуйста, в чем проблема.


Ответы (2 шт):

Автор решения: Юрий Копоть

function TwoString(initStr) {
    // разбиваем строку на массив, по пробелу
  const strItems = initStr.split(' ');

  const result = {};
  strItems.forEach( item => {
    // приводим в один регистр, для правильной проверки
    const normalItem = item.toLowerCase();

    // Если уже есть, просто увеличиваем. Если нет, устанавливает счетчик в 1
    if(normalItem in result) {
      result[normalItem] = result[normalItem] + 1;
    } else {
      result[normalItem] = 1;
    }
  });

  return Object.keys(result).map(k => {
    return `Слово: ${k}: ${result[k]};`
  }).join(' ')
}


alert(TwoString('да да нет ага угу ага'))

→ Ссылка
Автор решения: Laukhin Andrey

Вариант 1. Через вспомогательный объект.

let text = "да да да нет нет угу угу ыы ага ага";
let words = text.split(/\s+/);

let qty = 0;
let hashes = {};

words.forEach(v => {
  hashes[v] = hashes.hasOwnProperty(v) ? 1 : 0;
});

for (let key in hashes) qty += hashes[key];

console.log(qty);

Вариант 2. Сортировка и попарное сравнение.

let text = "да да да нет нет угу угу ыы ага ага";
let words = text.split(/\s+/);
words.sort();

let first = true;
let qty = 0;

words.reduce((a, v) => {
  if (a === v) {
    if (first) qty++;
    first = false;
  } else
    first = true;

  return v;
});

console.log(qty);

→ Ссылка