JavaScript的;将数组对象推送到另一个数组

时间:2017-11-30 04:58:09

标签: javascript arrays angularjs multidimensional-array

我正在编写一个用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

非常感谢任何帮助! 谢谢!

1 个答案:

答案 0 :(得分:0)

当您执行以下操作时:

parent1Alleles

使用toString()方法将console.log('parent 1 alleles ' + JSON.stringify(parent1Alleles));转换为字符串。对于数组,toString()在内部调用每个元素的toString(),并用逗号(,)分隔它们。由于各个元素也是数组,因此最终结果看起来像四个元素的平面数组。

如果您将数组视为JSON,则可以获得所需的输出,并在将其附加到字符串之前对其进行正确的字符串化。这样的事情应该有效:

trim()