2016-03-03 302 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