map返回一个数组但是
我明白了
,
a
b
而非预期
a,
b,
let names = ["a", "b"];
template = `<table>
${names.map(name => `<TR><TD>${name}</TD></TR>`)}
</table>
`
let div = document.getElementById("container");
div.innerHTML = template;
&#13;
<div id="container">
</div>
&#13;
答案 0 :(得分:5)
因为map
返回一个数组,并且模板将其转换为字符串,这意味着您将获得它们之间带逗号的数组条目。结果是:
<TR><TD>a</TD></TR>,
<TR><TD>b</TD></TR>
请注意
Array#toString
调用Array#join
只会在元素之间放置逗号,而不是在开头或结尾。)< / LI>
静态示例:
<table>
<tbody>
<TR><TD>a</TD></TR>,
<TR><TD>b</TD></TR>
</tbody>
</table>
底线:使用.join("")
完全摆脱逗号:
let names = ["a", "b"];
template = `<table>
${names.map(name => `<TR><TD>${name}</TD></TR>`).join("")}
</table>
`
let div = document.getElementById("container");
div.innerHTML = template;
<div id="container">
</div>
...或者如果您在条目后想要逗号,请在模板中手动插入:
let names = ["a", "b"];
template = `<table>
${names.map(name => `<TR><TD>${name},</TD></TR>`).join("")}
</table>
`
let div = document.getElementById("container");
div.innerHTML = template;
<div id="container">
</div>
答案 1 :(得分:1)
map
可能不是你想要的,reduce
在这种情况下是正确的方法(map返回一个数组,你想要一个字符串)。
let names = ['a', 'b'];
template =
`<table>
${names.reduce((acc, name) => acc + `<TR><TD>${name}</TD></TR>`, '')}
</table>
`
let div = document.getElementById("container");
div.innerHTML = template;