我正在尝试将文本转换为二进制文件,但是当我的循环运行时,它永远不会结束。我无法弄清楚为什么会这样。
有更好的方法吗?
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
});
}
}
答案 0 :(得分:1)
在+=
中使用friendsCopy[i].friendsName +=
即可修改friendsCopy[i].friendsName
。在每次迭代中,它会变得更长,因此它永远不会停止。
如果您只想将其输出到控制台,请将其更改为
friendsCopy[i].friendsName + friendsCopy[i].friendsName[j].charCodeAt(0).toString(2) + " ");
答案 1 :(得分:1)
您正在使用+=
增加friendsName值
在每个循环迭代中
简单解决方案:使用存储起始值的辅助测试参数:
这样,测试值在整个循环中都是固定的
e.g:
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
答案 2 :(得分: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
将在循环的每次迭代中执行,而不仅仅在开始时执行一次。