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

Javascript 将不同的数据推送到多个对象会导致将相同的数据推送到所有对象,javascript,arrays,json,Javascript,Arrays,Json,我有一个包含大量数据的大型“主对象”(objMaster) 我有3个单独的JSON对象(我知道,不是“技术上”的对象)用于3个类别,它们将保存一些从objMaster中的值计算出来的数据。我们叫他们: 对象类别1、对象类别2、对象类别3 我试图将数据按指定的索引推送到这些分类对象中。问题是,如果我将单独的数据推送到每个分类对象,它将所有数据推送到每个对象 $(objMaster).each(function(j,v){ var myCat1data = objMaster[j].C

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

我有3个单独的JSON对象(我知道,不是“技术上”的对象)用于3个类别,它们将保存一些从objMaster中的值计算出来的数据。我们叫他们: 对象类别1、对象类别2、对象类别3

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

$(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]中。获取myCat1data、myCat2data和myCat3data值的数据不仅仅是myCat1data的值。objCategory2[j]。数据和objCategory3[j]。数据也是如此

如果我注释掉对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);
}); 

您正在将对同一对象的引用推送到所有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: []
     });

而不是像这样初始化

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: [] });
});

这将使用不同的数据数组初始化ObjCategories

如何初始化
.data
属性?对于这个问题,
objCategory
数组是如何初始化的?也没有JSON对象;它们是JavaScript对象。您能显示数据初始化吗?是数组吗?您正在将完全相同的“数据集”对象推送到所有三个数组中。
.push()
操作不会复制。