Эти запятые являются результатом неявного преобразования массива в строку. Если вам не нужны эти запятые, вы должны явно преобразовать массив в нужную строку (join (""))
Вы сделали бы это, прежде чем передавать его в функцию? Или в шаблоне буквально как-то?
Я бы написал это так:
const renderNavItem = ({folder, title, navTitle}) => `<li>
<a href="${folder}/${title}.html">${navTitle}</a>
<li>`;
const renderNav = (items) => `<nav>
${items.map(renderNavItem).join("
")}
</nav>`;
вы также можете написать немного помощника для решения этой проблемы:
//"Rules" to convert any value into a string
const string = value => Array.isArray(value) ?
value.map(string).join("") :
value == null || value === false ?
"" :
String(value);
//a formatter that applies these "rules" to the values in a template string
const format = (strings, ...values) => strings.reduce((result, tpl, index) => result + string(values[index-1]) + tpl);
let example = format `here comes the Array:
<ul>${ [1,2,3,4,5].map(v => v&1? `<li>${v}</li>`: v*2) }</ul>
some more text ${1 < 2 && 'conditional text'} rest`;
console.log(example);
.as-console-wrapper{top:0;max-height:100%!important}
очевидно, вы не должны брать этот пример в качестве примера того, как создавать такие шаблоны, а скорее о вкусе возможностей, которые у вас есть с шаблонами и тегами