永远不会在for循环中结束

时间:2016-06-21 14:11:53

标签: javascript for-loop reactjs

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

有更好的方法吗?

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
      });
    }
}

3 个答案:

答案 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将在循环的每次迭代中执行,而不仅仅在开始时执行一次。