2016-06-21 83 views
1

我试图将文本转换为二进制文件,但是当我的循环运行时,它永远不会结束。我无法弄清楚为什么是这样。永不止于for循环

有没有更好的方法来做到这一点?

handleBinaryChange: function(e){ 
    var friendsCopy = this.state.friendsArray; 
    for (var i = 0; i < friendsCopy.length; i++) { 
     for (var j = 0; j < friendsCopy[i].friendsName.length; j++) { 
      console.log(friendsCopy[i].friendsName += friendsCopy[i].friendsName[j].charCodeAt(0).toString(2) + " "); 
     }//End of 'j' for 
     }//End of 'i' for 

     this.setState({ 
      friendsArray: friendsCopy //make friendsCopy contain the new value for friendsName 
     }); 
    } 
} 
+2

都将增加你的console.log语句friendsName,不是吗? – Icepickle

+0

此外,它不是friendsArray的副本,它是对原始数组的另一个参考。 – ManoDestra

+0

是不是将新值添加到前一个? – grgre

回答

0

您正在使用的在您的断点条件friendsName的长度,但你不断增加循环内的字符串的长度:

for(var j=0; j<friendsCopy[i].friendsName.length; j++){ 
    console.log(friendsCopy[i].friendsName += friendsCopy[i].friendsName[j].charCodeAt(0).toString(2) + " "); 
} 

注意friendsCopy[i].friendsName.length将用于的每个迭代执行循环,不仅在开始时一次。

+0

我如何重复他的代码?我指出他的错误在哪里以及他做错了什么。我坚信他自己能够解决这个问题,因为这应该是学习过程的一部分。 – Timo

+0

@Ippickle是否有一个反对这种方法的规则?请指出。 – warkentien2

+0

@Ippickle明白了。 – warkentien2

1

通过在friendsCopy[i].friendsName +=中使用+=您正在修改friendsCopy[i].friendsName。在每次迭代中它会变得更长,所以它永不停止。

如果你只是想将它输出到控制台改变它

friendsCopy[i].friendsName + friendsCopy[i].friendsName[j].charCodeAt(0).toString(2) + " "); 
1

您与+=
在每个循环增加friendsName值迭代

简单的解决方案:使用辅助测试存储起始值的参数:
这样,测试值在整个循环中都是固定的
例如: -

for(var i=0; i<friendsCopy.length; i++){ 

    var test = friendsCopy[i].friendsName.length; // added this param 
    for(var j=0; j<test; j++){ // used it here 

    console.log(friendsCopy[i].friendsName += friendsCopy[i].friendsName[j].charCodeAt(0).toString(2) + " "); 

    }//End of 'j' for 

}//End of 'i' for