我正在编写一个用punnett正方形计算遗传杂交的应用程序,我的应用程序允许用户指定他们想要计算多达5个的特征交叉,所以我的代码中的模糊性不断增长。我对这个奇怪的javascript细微差别感到有些迷失
var traitSchema = {
"traitName" : '',
"dominant" : false,
"alleles" : ['','']
};
self.parent1 = {
"traits": []
}
self.parent2 = {
"traits": []
}
//其他代码//
// Called by init (onchage traitsnum); populates traits array according to traitsnum
function buildParents() {
for(var i = 0; i < self.traitsNum; i++) {
self.parent1.traits.push(angular.copy(traitSchema));
self.parent2.traits.push(angular.copy(traitSchema));
}
}
self.submitClick = function() {
if ((self.traitsNum < 1) || (self.traitsNum > 5)) {
alert("You must choose 1 to 5 traits to calculate.");
}
else {
assignAllelesCross();
}
};
function assignAllelesCross() {
var parent1Alleles = [];
var parent2Alleles = [];
for (var i = 0; i < self.traitsNum; i++) {
parent1Alleles.push(self.parent1.traits[i].alleles);
parent2Alleles.push(self.parent2.traits[i].alleles);
}
console.log('parent 1 alleles ' + parent1Alleles);
console.log('parent 2 alleles ' + parent2Alleles)
}
所以一切正常,但在我的控制台中显示父母trait1和trait2等位基因的结果看起来像这样 - &gt; [A,A,B,B]
但我需要的是 - &gt; [[A,a],[B,b]]
我不确定它是什么导致它分裂成每个单独的值,而不是将原始的allele数组对象保持为它们自己的数组对象,就像它在模式声明中指定的那样。
框架信息: 角度&#34;:1.5.7
非常感谢任何帮助! 谢谢!
答案 0 :(得分:0)
当您执行以下操作时:
parent1Alleles
使用toString()方法将console.log('parent 1 alleles ' + JSON.stringify(parent1Alleles));
转换为字符串。对于数组,toString()在内部调用每个元素的toString(),并用逗号(,)分隔它们。由于各个元素也是数组,因此最终结果看起来像四个元素的平面数组。
如果您将数组视为JSON,则可以获得所需的输出,并在将其附加到字符串之前对其进行正确的字符串化。这样的事情应该有效:
trim()