为什么我在下面的ES6循环中收到“undefined不是函数”的错误提示?

3

输入:

第一行

第二行 第三行

第四行

代码:

let res = str.split('\n\n')
for (let result of res) {
    res = `<p class="blockquote">${res.replace(/^> /gm, '')}</p>`
}
console.log(`text: ${res}`)

str.split('\n\n')输出的是第一行,第二行 第三行,第四行。这正是我所期望的。

现在我想使用for循环来获取每个项目并用p标签包围它。然而,我遇到了以下错误:

TypeError: undefined is not a function

我对ES6不是很熟悉。这个循环有什么问题吗?


你最终想要得到什么?一个包含四个字符串的数组,这些字符串被引用块标签包裹吗?你能展示一下期望的输出吗? - Touffy
2个回答

3

没错,有两个问题。

res = `<p class="blockquote">${res.replace(/^> /gm, '')}</p>`

res最初是一个数组,所以它没有replace方法。这就是你得到的错误。

另一件事是,一旦你修复了这个问题(用你的循环变量result替换res),你将结果字符串赋值给res。我不确定你的期望是什么,但我猜这样做行不通。


将值分配给 res 是可以的,因为它只在循环开始时获取一次,尽管从风格上来说有点奇怪。 - loganfsmyth
我知道这不会打破循环,但它会覆盖每个结果,因此最终 res 只包含最后一个字符串,而不是所有字符串。只能假设因为 OP 没有澄清,但最明显的期望结果是将每个字符串映射到具有标记的字符串。 - Touffy
我明白了,那是我的错误。 - loganfsmyth

3
在`for`循环中给变量`res`赋新值的问题。所以在第一次循环后,`res`将包含另一个值,并且循环将结束。
试试这段代码:
let str = 'first line\n\nsecond line third line\n\nfourth line';
let res = str.split('\n\n')

for (let result of res) {
    let i = `<p class="blockquote">${result.replace(/^> /gm, '')}</p>`
    console.log(i);
}

1
res赋值是可以的,虽然有点奇怪。只是.replace调用是错误的。 - loganfsmyth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接