将不同的数据推送到多个对象会导致将相同的数据推送到所有对象

时间:2019-04-10 14:14:45

标签: javascript arrays json

我有一个包含大量数据的大型“主对象”(objMaster)。

我有3个类别的3个单独的JSON对象(我知道,不是“技术上”的对象),它们将保存从objMaster中的值计算出的一些数据。我们称它们为:     objCategory1,objCategory2,objCategory3

我正在尝试将数据推入指定索引处的这些分类对象中。问题是,如果我将单独的数据推送到每个分类的对象,它将把所有数据推送到每个对象。

$(objMaster).each(function(j,v){    
   var myCat1data = objMaster[j].Cat1Completed / objMaster[j].Cat1Total ;
   var myCat2data = objMaster[j].Cat2Completed / objMaster[j].Cat2Total ;
   var myCat3data = objMaster[j].Cat3Completed / objMaster[j].Cat3Total ;

   objCategory1[j].data.push(myCat1data);       
   objCategory2[j].data.push(myCat2data);
   objCategory3[j].data.push(myCat3data);       
}); 

导致objCategory1 [j] .data获得myCat1data,myCat2data和myCat3data的值,而不仅仅是myCat1data的值。 objCategory2 [j] .data和objCategory3 [j] .data一样。

如果我注释掉对objCategory2和objCategory3的推送,则objCategory1 [j] .data仅获得myCat1data值。

$(objMaster).each(function(j,v){    
   var myCat1data = objMaster[j].Cat1Completed / objMaster[j].Cat1Total ;
   var myCat2data = objMaster[j].Cat2Completed / objMaster[j].Cat2Total ;
   var myCat3data = objMaster[j].Cat3Completed / objMaster[j].Cat3Total ;

   objCategory1[j].data.push(myCat1data);       
   // objCategory2[j].data.push(myCat2data);
   // objCategory3[j].data.push(myCat3data);        
}); 

有什么想法吗?

更新: 我正在使用类似的迭代来初始化类别数组

var objCategory1= [];
var objCategory2= [];
var objCategory3= [];

// create category dataset shells
$(objMaster).each(function(j,v){    

  var myDataSet = {
   label: mycategory,
   data: []
 }; 

 // push dataset shell to associated chart data objects
 objCategory1.push(myDataSet);
 objCategory2.push(myDataSet);
 objCategory3.push(myDataSet);
}); 

2 个答案:

答案 0 :(得分:1)

而不是像这样初始化

var objCategory1= [];
var objCategory2= [];
var objCategory3= [];

// create category dataset shells
$(objMaster).each(function(j,v){    

  var myDataSet = {
   label: mycategory,
   data: []
 }; 

 // push dataset shell to associated chart data objects
 objCategory1.push(myDataSet);
 objCategory2.push(myDataSet);
 objCategory3.push(myDataSet);
}); 

您可以尝试一下

var objCategory1= [];
var objCategory2= [];
var objCategory3= [];

// create category dataset shells
$(objMaster).each(function(j,v){    
 objCategory1.push({ label: mycategoy, data: [] });
 objCategory2.push({ label: mycategoy, data: [] });
 objCategory3.push({ label: mycategoy, data: [] });
});

这将使具有不同数据数组的objCategoryies变得庞大

答案 1 :(得分:0)

您要将对同一对象的引用推入所有3个'objCategoryX'数组中:

var myDataSet = {
   label: mycategory,
   data: []
 };     

 objCategory1.push(myDataSet);
 objCategory2.push(myDataSet);
 objCategory3.push(myDataSet);

相反,您需要为每次使用创建新对象:

objCategory1.push({
       label: mycategory,
       data: []
     });
objCategory2.push({
       label: mycategory,
       data: []
     });
objCategory3.push({
       label: mycategory,
       data: []
     });