我有一个包含元素列表的数组:
description: [
'HTML & CSS',
'Responsive Design Fundamentals',
'Javascript object-oriented programming',
'jQuery',
'Website Performance Optimization',
'CRP and RAIL',
'REST API and Ajax',
'Javascript Design patterns',
'Bootsrap Framework',
'Polymer Web Elements'
],
我正在尝试使用模板字符串将此列表附加到HTML元素:
var description = [
'HTML & CSS',
'Javascript object-oriented programming',
'Progressive Web apps (PWAs)',
'Website Performance Optimization',
'Webpack and Gulp workflows',
'Fullstack React.js',
'Web Components',
'Responsive web design',
'Sketch design',
'GraphQL and Relay'
]
$('body').append(
`
<div class="description">
<ul>
${description.map(
function(work) {
return `<li>${work}</li>`
}
)}</ul>
</div>
`
)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
结果我在每个列表元素之间得到一个意外的逗号(参见下面的代码片段)
我该如何避免这种情况?
编辑:已添加代码段
答案 0 :(得分:58)
here使用toString()
方法,该方法默认情况下将map
与,
的返回数组连接起来。
要避免此“问题”,您可以使用join('')
var description = [
'HTML & CSS',
'Javascript object-oriented programming',
'Progressive Web apps (PWAs)',
'Website Performance Optimization',
'Webpack and Gulp workflows',
'Fullstack React.js',
'Web Components',
'Responsive web design',
'Sketch design',
'GraphQL and Relay'
]
$('body').append(
`
<div class="description">
<ul>
${
description.map(function(work) {
return `<li>${work}</li>`
}).join('')
}
</ul>
</div>
`
)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
答案 1 :(得分:11)
.map()
返回数组。您可能希望返回包含连接在一起的数组元素的字符串。您可以使用.join('')
:
var description = [
'HTML & CSS',
'Javascript object-oriented programming',
'Progressive Web apps (PWAs)',
'Website Performance Optimization',
'Webpack and Gulp workflows',
'Fullstack React.js',
'Web Components',
'Responsive web design',
'Sketch design',
'GraphQL and Relay'
]
$('body').append(
`
<div class="description">
<ul>
${description.map(
function(work) {
return `<li>${work}</li>`
}
).join('') /* added .join('') here */}</ul>
</div>
`
)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
答案 2 :(得分:1)
正如其他人指出的那样(为完整性起见,我将重复此操作),Array.prototype.map
返回一个新数组,其中包含在传递给它的函数中更改的元素。
当您将数组连接成字符串时(这就是这里发生的情况),它也会将数组也转换成字符串。而且,当数组转换为字符串时,它会使用逗号自动加入。
const arr = ['<a>', '<b>'];
console.log(arr + ""); // <a>,<b>
除了使用.join()
显式传递一个空字符串作为分隔符外,您还可以使用Array.prototype.reduce
将数组缩小为单个值。
description.reduce((acc, work) => acc + `<li>${work}</li>`, '')
因此完整的代码如下:
var description = [
'HTML & CSS',
'Javascript object-oriented programming',
'Progressive Web apps (PWAs)',
'Website Performance Optimization',
'Webpack and Gulp workflows',
'Fullstack React.js',
'Web Components',
'Responsive web design',
'Sketch design',
'GraphQL and Relay'
]
$('body').append(
`
<div class="description">
<ul>
${
description.reduce((acc, work) => acc + `<li>${work}</li>`, '')
}
</ul>
</div>
`
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
答案 3 :(得分:0)
为了简单你的代码,我只是这样使用:
${description.map((work) => <li>${work}</li>
).join('')}