2016-06-21 121 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