2016-03-03 29 views
1

所以我試圖做一個「.replace」循環,但有些神祕的事情正在發生。是否.replace在for循環中不起作用?

var cell = "r1c1"; 

for (i = 0; i <= 4; i++){ 
    cell = cell.replace(cell[3],i+1); 

我的預期輸出:

cell = "r1c1" 
cell = "r1c2" 
cell = "r1c3" 
cell = "r1c4" 
cell = "r1c5" 

實際輸出:

cell = "r1c2" 
cell = "r2c1" 
cell = "r2c3" 
cell = "r2c4" 
cell = "r2c5" 

正如你所看到的,它運行正常,除了第二次迭代。 我在做什麼這樣錯了?

+1

嗯...實際輸出是'r1c1,r2c1,r2c3,r2c4,r2c5'。 – Teemu

+0

@Teemu謝謝!我編輯過它。 –

回答

-1

我不喜歡這樣,但我修復結束了使用看起來像這樣:

cell = "r"+(j)+cell.substr(2,2);

由於我不可避免地回答我的問題,在這裏,我還是要徵求意見:

多長時間你會說這樣的解決方案是長期的嗎?

5

cell.replace(cell[3], i+1)將替換它在字符串'r1c1'中找到的'1'字符的第一個實例。在這種情況下,它是「1」在位置1中被替換,而不是「1」在位置3.

爲了得到你想要的結果,嘗試

var cell = "r1c1"; 

for (i = 0; i <= 4; i++){ 
    cell = cell.substring(0, cell.length-1)+(i+1); 
} 
+0

這非常有幫助! 現在我該如何迭代這個,所以它可以在c每改變5次後改變一次r的數字? –

0

您可以使用正則表達式:/^r(\d+)c(\d+)/

var row_col = 'r1c1'; 
var match = /^r(\d+)c(\d+)/.exec(row_col); // match string 
var row = +match[1]; // extract row 
var col = +match[2]; // extract column 
// edit row and col as needed 
row_col = 'r' + row + 'c' + col; // "reassemble" string 

這會照顧較大的行/列數比9.如果未在意料之中,那麼閱讀String.prototype.substring()

var row_col = 'r1c1'; 
var row = +row_col.substring(1,2); 
var col = +row_col.substring(3,4) 
+0

感謝您的回答! 現在,我是否正確地假設'substring()'和'substr()'不是同一個函數? –

+0

@MarkPuchalaII,是的,這不一樣的功能,參數的區別 – Grundy