Мой код:Javascript конструктор копии массива, как пустой, когда он должен содержать элементы
function BayesNet(vars) {
this.variables = {};
this.numVars = Object.keys(this.variables).length;
for (v in vars) {
this.variables[v] = new BayesNode(vars[v]);
this.variables[v].CPTorder = this.generateDomainRows(this.variables[v].parents);
this.variables[v].fullCPT = {}
for (var i = 0; i < this.variables[v].CPTorder.length; i++) {
this.variables[v].fullCPT[this.variables[v].CPTorder[i]] = this.variables[v].CPT[i];
}
this.variables[v].blocks = false;
}
}
function BayesNode(obj) {
this.parents = obj.parents;
this.children = obj.children;
if (typeof obj.domain == 'undefined')
this.domain = ['T','F'];
else
this.domain = obj.domain;
this.observation = obj.observation;
this.CPT = obj.CPT;
this.sampleDistribution = [];
for (var i = 0; i < this.CPT.length; i++) {
var s = [];
if(this.CPT[i].length == this.domain.length - 1)
this.CPT[i].push(1 - sumArray(this.CPT[i]));
s.push(this.CPT[i][0]);
for (var j = 1; j < this.domain.length - 1; j++) {
s.push(this.CPT[i][j]+s[j-1]);
}
s.push(1.0);
this.sampleDistribution.push(s);
}
//TODO: Check if CPT is valid
}
Моя проблема заключается в том, что BayesNode.parent копируется неправильно.
BayesNode.parent должен быть массивом, содержащим элементы, и когда я запускаю отладчик через конструктор, this.parents является правильным значением. Однако, как только я вернусь к конструктору BayesNet, родители будут пустым массивом. Что может быть причиной этого? Все остальные переменные в объекте ведут себя так, как ожидалось.
, javascript is асинхронный. это основная причина вашей проблемы. –
Вы не копируете «родители». – zeroflagL