首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在通过json映射并使用javascript转换为html时获得额外的逗号

在通过json映射并使用javascript转换为html时获得额外的逗号
EN

Stack Overflow用户
提问于 2018-08-25 23:52:22
回答 1查看 387关注 0票数 1

我正在做一个业余爱好项目来制作一个网站生成器,它使用节点fs-extra模块读取json文件,然后将数据传递到一个函数中,该函数使用模板文字构建一个html文件,但我的html中一直有一堆逗号。有谁知道为什么会发生这种情况,或者可以帮助我找到解决方案来解决它?

使用fs包写入文件

代码语言:javascript
复制
              <nav>
                ${
                    `<ul class='nav-list'>
                    ${navList.map(navItem =>{
                        return (`<li>
                            <a href="${
                                 navItem.folder+"/" + navItem.title +".html"
                            }">
                             ${navItem.navTitle}
                            </a>
                        <li>`)
                    })}
                    </ul>
                    `
                }
                </nav>

这是它输出的带有额外逗号的HTML -我有另一个例子,它有更多带有相同逗号问题的标签(为了简单起见,添加了这个)输出:

代码语言:javascript
复制
<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()之后)时,我的终端输出的内容

代码语言:javascript
复制
[ { title: 'Index', folder: 'root', navTitle: 'Home' },

{标题:‘索引2’,文件夹:'section1',navTitle:'Section1‘}]

提前感谢(上面不在代码块中的代码行是代码块的一部分)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-26 00:07:52

这些逗号来自数组到字符串的隐式转换。如果你不想要这些逗号,你应该明确地将数组转换成你想要的字符串(join(""))

在把它传递给函数之前,你会这样做吗?还是以某种方式在模板文字中?

我会这样写:

代码语言:javascript
复制
const renderNavItem = ({folder, title, navTitle}) => `<li>
  <a href="${folder}/${title}.html">${navTitle}</a>
<li>`;

const renderNav = (items) => `<nav>
  ${items.map(renderNavItem).join("\n")}
</nav>`;

您还可以编写一个小帮助器来处理该问题:

代码语言:javascript
复制
//"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);
代码语言:javascript
复制
.as-console-wrapper{top:0;max-height:100%!important}

显然,您不应该将此示例作为如何构建此类模板的示例,而应该尝试使用模板字符串和标记函数的可能性

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52018900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档