2015-10-19 39 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

相關問題