Javascript 将不同的数据推送到多个对象会导致将相同的数据推送到所有对象
我有一个包含大量数据的大型“主对象”(objMaster) 我有3个单独的JSON对象(我知道,不是“技术上”的对象)用于3个类别,它们将保存一些从objMaster中的值计算出来的数据。我们叫他们: 对象类别1、对象类别2、对象类别3 我试图将数据按指定的索引推送到这些分类对象中。问题是,如果我将单独的数据推送到每个分类对象,它将所有数据推送到每个对象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).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()
操作不会复制。