Так считают эту функцию:Когда я пытаюсь использовать .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}
это как в первом прогоне. Зачем?
Вы инициализирует массив таким образом, что она начинается с одного объекта в нем. – Pointy
@Pointy Ok! Как бы я начал и инициализировал его так, чтобы он был пуст? 'var generationObject = [{string :, score:}];' like this? –
Нет, вот так: 'var generationObject = [];' – Pointy