У вас много проблем с вашим кодом, как описано в комментариях, но я бы просто попробовал более простой метод. Сделайте что-то вроде этого, и это будет работать без необходимости перебирать символы строки, которая вызывает большинство ваших проблем прямо сейчас:
for (let i = 0; i < str.length; i += 1) {
str = str.replace(/([aeiou])([aeiou])/g, '$1-$2')
}