2015-10-19 90 views
3

输入:为什么我在下面的ES6 for循环中得到“undefined不是函数”?

first line

second line third line

fourth line

的代码:

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')输出first line,second line third line,fourth line。我的预期。

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

TypeError: undefined is not a function 

我对ES6不是很有经验。循环有问题吗?

+0

什么是你想到底要得到什么?四个字符串包装在blockquote标签中的数组?你能显示所需的输出吗? – Touffy

回答

2

是的,有什么问题。两件事情。

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

RES是最初的阵列,所以它没有replace方法。这是你得到的错误。

另一件事,一旦你解决这个问题(用你的循环变量result替换res),就是你把结果字符串分配给res。我不确定你的期望是什么,但我想它不会那样工作。

+0

分配给'res'是没有问题的,因为它只在循环开始时被取出一次,虽然它有点怪异的样式。 – loganfsmyth

+0

@loganfsmyth我知道它不会中断循环,但会覆盖每个结果,因此最后'res'只包含最后一个字符串,而不是全部。我只能假设,因为OP尚未澄清,但最明显的理想结果是将每个字符串映射到带有标记的字符串。 – Touffy

+0

啊,有一天,我的错误。 – 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); 
} 

在这里,你已经工作示例:http://www.es6fiddle.net/ifxr8tu8/

+1

分配给'res'很好,虽然有点不可思议。这只是错误的'.replace'调用。 – loganfsmyth

相关问题