2016-06-21 5 views
1

Я пытаюсь преобразовать текст в двоичный файл, но когда мой цикл работает, он никогда не заканчивается. Я не могу понять, почему это так.Никогда не заканчивается for for loop

Есть ли лучший способ сделать это?

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

вы увеличиваете friendsName в вашем console.log заявлении, нет? – 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

@ Icepickle есть правило против такого подхода? пожалуйста, примите во внимание. – warkentien2

+0

@Icepickle получил его. – 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