首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将不同的数据推送到多个对象会导致将相同的数据推送到所有对象

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

Stack Overflow用户
提问于 2019-04-10 22:14:45
回答 2查看 58关注 0票数 0

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

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

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

代码语言:javascript
复制
$(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);       
}); 

这会导致objCategory1j.data获得myCat1data、myCat2data和myCat3data的值,而不仅仅是myCat1data的值。objCategory2j.data和objCategory3j.data也是如此。

如果我注释掉对objCategory2 & objCategory3的推送,那么objCategory1j.data只获得myCat1data值。

代码语言:javascript
复制
$(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);        
}); 

知道这是怎么回事吗?

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

代码语言:javascript
复制
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);
}); 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-10 22:36:47

而不是像这样初始化

代码语言:javascript
复制
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);
}); 

你能试试这个吗?

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-04-10 22:35:56

您正在将对同一对象的引用推送到所有3个'objCategoryX‘数组中:

代码语言:javascript
复制
var myDataSet = {
   label: mycategory,
   data: []
 };     

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

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

代码语言:javascript
复制
objCategory1.push({
       label: mycategory,
       data: []
     });
objCategory2.push({
       label: mycategory,
       data: []
     });
objCategory3.push({
       label: mycategory,
       data: []
     });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55614791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档