2016-04-01 1 views
0

Так считают эту функцию:Когда я пытаюсь использовать .push внутри цикла, кажется, начинается на один этап впереди номера интервала, который, кажется, вызывает переполнение?

function generation(input_text, characters, target_text, mutation_rate, amount_offspring) { 
var generationObject = [{string:"", score: 0}]; 
var evolved_string = ""; 
var best_offspring = {string:"", score: 0}; 

for(var i = 0; i <= amount_offspring; i++) { 
    evolved_string = evolve(input_text, characters, mutation_rate) 
    console.log("E= " + evolved_string); 
    generationObject.push({ 
      string: evolved_string, 
      score: score(target_text, evolved_string) 
    }); 
    console.log(generationObject[i]); 

    // if there are more then 2 elements in the object array. 
     Check if the current offspring has a higher score then the previous one. 
     If it does, its the best offspring 
    if (generationObject.length > 1) { 
     if (generationObject[i].score > best_offspring.score) { 
      best_offspring.string = generationObject[i].string; 
      best_offspring.score = generationObject[i].score; 
     } 
    } 
    // if there only is one offspring. Its the best, by defult. 
    else { 
     best_offspring.string = generationObject[i].string; 
     best_offspring.score = generationObject[i].score; 
    } 

    // increment generations 
    generations++; 
    return best_offspring.string; 
} 

Этот цикл является частью более крупной программы, http://pastebin.com/tRU1KYP7 и http://pastebin.com/MDt3M2s5, где она принимает строку в качестве входных данных, копирует строку amount_offspring раз в то время как мутирует одного из персонажей. Моя ошибка заключается в том, что она пытается нажимать evolved_string и score на массив generationObject, делая .push().

Кажется, что при этом он пропускает generationObject[0]. Почему это? Могу ли я использовать любой другой метод для добавления в мой массив? спасибо!

EDIT: Здесь я сделал вывод на консоль, чтобы вы могли более четко видеть, что я имею в виду!

functions.js:4 Input= xkt 
functions.js:13 Evolved= xkr 
functions.js:18 Object {string: "", score: 0} 
functions.js:13 Evolved= xks 
functions.js:18 Object {string: "xkr", score: 0} 
functions.js:13 Evolved= xct 
functions.js:18 Object {string: "xks", score: 0} 

Но здесь вы можете видеть, что functions.js:18 Object {string: "", score: 0} это как в первом прогоне. Зачем?

+0

Вы инициализирует массив таким образом, что она начинается с одного объекта в нем. – Pointy

+0

@Pointy Ok! Как бы я начал и инициализировал его так, чтобы он был пуст? 'var generationObject = [{string :, score:}];' like this? –

+0

Нет, вот так: 'var generationObject = [];' – Pointy

ответ

2

Вы инициализировать массив с одним объектом:

var generationObject = [{string:"", score: 0}]; //use var generationObject = []; instead 

Ваша ошибка переполнения приходит отсюда:

i <= amount_offspring; //should be i < amount_offspring, since you start at 0 
+0

YES! это сделал трюк, спасибо! Не знал, что вы можете инициализировать и массивы объектов. –

Смежные вопросы