正如您所看到的,我在createContents
中创建了一个计数器,并将其与传递给convertToHTML
的数据一起使用:
function createContents(text, orig) {
if (orig.match(/^#{2}\s/)) {
let index = 1
, headingIndex = `item-${index++}`
, headingText = `${text.replace(/^## /gm, '')}`
text = `<p><a href=#${headingIndex}>${headingText}</p>`
console.log(text)
}
}
function convertToHTML(markdownSource) {
let data = markdownSource.split(/\n\n|^>(?!.)/gm)
, orig = data.slice()
for (let i = 0, l = orig.length; i < l; ++i) {
createContents(data[i], orig[i])
}
}
输入如下:
## Title 1
## Title 2
所需的输出应如下所示:
<p><a href=#item-1>Title 1</p>
<p><a href=#item-2>Title 2</p>
但我得到了这个:
<p><a href=#item-1>Title 1</p>
<p><a href=#item-1>Title 2</p>
我做错了什么?我该如何解决它?
答案 0 :(得分:5)
问题是您的index
变量是局部变量,并且仅限于if
语句的范围。您应该像这样定义index
:
var index_counter = 1;
function createContents(text, orig) {
if (orig.match(/^#{2}\s/)) {
let headingIndex = `item-${index_counter++}`
, headingText = `${text.replace(/^## /gm, '')}`
text = `<p><a href=#${headingIndex}>${headingText}</p>`
console.log(text)
}
}
function convertToHTML(markdownSource) {
let data = markdownSource.split(/\n\n|^>(?!.)/gm)
, orig = data.slice()
for (let i = 0, l = orig.length; i < l; ++i) {
createContents(data[i], orig[i])
}
}
let
允许您声明范围有限的变量 使用它的块,语句或表达式。这与此不同var
关键字,它全局定义变量,或者本地定义变量 整个函数,无论块范围如何。