JSFiddle - React, Tailwind, and code Playground
JavaScript
const underscoreIfEmpty = string => string.length ? string : '_';
const uniqueLetters = string => Array.from(new Set(string.split(''))).join();
// выпилил выделение уникальных значений в uniqueLetters, каждая функция должна делать как можно меньше
const removeLetters = lettersArr => pred => lettersArr.split('').filter(l => pred(l, lettersArr)).join('');
// теперь предикат возвращает отрицание чтобы в removeLetters можно было сделать не !pred(l, lettersArr) а pred(l, lettersArr)
const predicate = (letter, string) => !(string.match(new RegExp(letter, 'gi')).length % 2 === 0);
console.log(underscoreIfEmpty(uniqueLetters(removeLetters('aabbbc')(predicate))));
console.log(underscoreIfEmpty(uniqueLetters(removeLetters('abbadddd')(predicate))));
console.log(underscoreIfEmpty(uniqueLetters(removeLetters('abaadd')(predicate))));