получение дополнительных запятых при сопоставлении json и преобразовании в html с помощью javascript

Im, делающий проект хобби, чтобы создать генератор сайта, который читает json-файл, использует модуль узла fs-extra, затем передает эти данные в функцию, которая строит html-файл с использованием шаблонных литералов, но я продолжаю получать кучу запятых в своем html. Кто-нибудь знает, почему это происходит или может помочь мне найти решение, чтобы исправить это?

запись файлов с использованием пакета fs

              <nav>
                ${
                    `<ul class='nav-list'>
                    ${navList.map(navItem =>{
                        return (`<li>
                            <a href="${
                                 navItem.folder+"/" + navItem.title +".html"
                            }">
                             ${navItem.navTitle}
                            </a>
                        <li>`)
                    })}
                    </ul>
                    `
                }
                </nav>

вот HTML, который он выводит с дополнительной запятой - у меня есть другой случай, у которого больше тегов с одной и той же запятой (добавлено это для простоты) OUTPUT:

<nav>
                <ul class='nav-list'>
                    <li>
                            <a href="./root/Index.html">
                             Home
                            </a>
                        <li>,<li>
                            <a href="./section1/Index2.html">
                             Section1
                            </a>
                        <li>
                    </ul>

                </nav>

Это то, что мой терминал выводит, когда я регистрирую navList чуть выше его отображения (после JSON.parse ())

[ { title: 'Index', folder: 'root', navTitle: 'Home' },

{title: 'Index2', папка: 'section1', navTitle: 'Section1'}]

Спасибо заранее (указанная выше строка не в кодовом блоке является частью блока кода)

javascript,json,node.js,parsing,template-literals,

1

Ответов: 1


1 принят

Эти запятые являются результатом неявного преобразования массива в строку. Если вам не нужны эти запятые, вы должны явно преобразовать массив в нужную строку (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}

очевидно, вы не должны брать этот пример в качестве примера того, как создавать такие шаблоны, а скорее о вкусе возможностей, которые у вас есть с шаблонами и тегами

JavaScript, JSON, Node.js, разбор, шаблонные-литералы,
Похожие вопросы
Яндекс.Метрика