Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将数据添加到对象内的数组将添加到所有数组_Javascript_Arrays - Fatal编程技术网

Javascript 将数据添加到对象内的数组将添加到所有数组

Javascript 将数据添加到对象内的数组将添加到所有数组,javascript,arrays,Javascript,Arrays,我有一个从用户上传数据的对象数组。现在我尝试更改此数组,以便获取chart.js上载图的数据集 这个想法是用所有的时间(我不知道有多少天),每天每小时的上传次数,然后把它放在我的图表中的一个对象数组中。一切都很好,除了我没有得到一个每小时上传一天,但一个上传阵列,看起来所有天都一样 根据我的示例变量Uploads我应该得到两个数据数组不同的对象,但它们是相同的 有人能告诉我哪里出了错吗 //我的示例数据 让上传=[{ 用户:“user1”, 档案:[{ uploadToServerTime:'

我有一个从用户上传数据的对象数组。现在我尝试更改此数组,以便获取chart.js上载图的数据集

这个想法是用所有的时间(我不知道有多少天),每天每小时的上传次数,然后把它放在我的图表中的一个对象数组中。一切都很好,除了我没有得到一个每小时上传一天,但一个上传阵列,看起来所有天都一样

根据我的示例变量
Uploads
我应该得到两个数据数组不同的对象,但它们是相同的

有人能告诉我哪里出了错吗

//我的示例数据
让上传=[{
用户:“user1”,
档案:[{
uploadToServerTime:'21:12:2018 09:15:00'
}]
}, {
用户:“user2”,
档案:[{
uploadToServerTime:'22:12:2018 10:17:00'
}]
}, {
用户:“user3”,
档案:[{
uploadToServerTime:'22:12:2018 09:14:00'
}]
}]
//hourlyUpload阵列一天中每小时的长度为24
设hourlyUpload=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
让dailyUploadtemp=[];
让dailyUpload=[];
让时光流逝;
让我们有一天;
让上传瞬间;
对于(让x个上载){
if(x.hasOwnProperty('files')){
对于(x.x文件中的y){
if(y.hasOwnProperty('uploadToServerTime')){
uploadMoment=时刻(y.uploadToServerTime,['DD.MM.YYYY HH:MM:ss']);
day=uploadMoment.format('DD.MM.YYYY');
每日上传温度推送({
标签:day,
数据:hourlyUpload
})
}
}
}
}
dailyUpload=uqby(dailyUploadtemp,'label');
//现在我有了一个对象数组,每天上传的时间都是空的
对于(让x个上载){
if(x.hasOwnProperty('files')){
对于(x.x文件中的y){
if(y.hasOwnProperty('uploadToServerTime')){
uploadMoment=时刻(y.uploadToServerTime,['DD.MM.YYYY HH:MM:ss']);
小时=上传时刻。格式('H');
day=uploadMoment.format('DD.MM.YYYY');
for(让z代表dailyUpload){
如果(z.标签===天){
//这里有点不对劲。金额被添加到每个数据中,而不仅仅是z数据
z、 数据[小时]=(z.数据[小时]+1);
}
}
}
}
}
}
设ctx=document.getElementById(“myChart”).getContext(“2d”);
设myChart=新图表(ctx,{
键入:“行”,
数据:{
标签:['00:00','01:00','02:00','03:00','04:00','05:00','06:00','07:00','08:00','09:00','10:00','11:00','12:00','13:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00','23:00'],
数据集:每日上传
},
选项:{
//回答:错,
动画:{
持续时间:1000,
放松:“easeOutQuad”
},
比例:{
xAxes:[{
键入:“时间”,
时间:{
解析器:“HH:mm”,
单位:小时,
单位步长:1,
显示格式:{
‘分钟’:‘HH:mm’,
‘hour’:‘HH:mm’,
分钟:“00:00”,
马克斯:“23:59”
}
}
}]
}
}
});

应该有两条不同的线,但我只得到两条具有相同数据点的线

您的问题在这里:

dailyUploadtemp.push({
   label: day,
   data: hourlyUpload
})
dailyUploadtemp
是一个对象,其
data
属性是对
hourlyUpload
数组的引用

每个对象都有对同一数组的引用。因此,如果要更新此数组,则修改会反映在所有
dailyUpload
对象中

您可以通过在
dailyUploadTemp
对象中创建
data
属性时克隆数组来解决此问题。 一种方法是使用:

//我的示例数据
让上传=[{
用户:“user1”,
档案:[{
uploadToServerTime:'21:12:2018 09:15:00'
}]
}, {
用户:“user2”,
档案:[{
uploadToServerTime:'22:12:2018 10:17:00'
}]
}, {
用户:“user3”,
档案:[{
uploadToServerTime:'22:12:2018 09:14:00'
}]
}]
//hourlyUpload阵列一天中每小时的长度为24
设hourlyUpload=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
让dailyUploadtemp=[];
让dailyUpload=[];
让时光流逝;
让我们有一天;
让上传瞬间;
对于(让x个上载){
if(x.hasOwnProperty('files')){
对于(x.x文件中的y){
if(y.hasOwnProperty('uploadToServerTime')){
uploadMoment=时刻(y.uploadToServerTime,['DD.MM.YYYY HH:MM:ss']);
day=uploadMoment.format('DD.MM.YYYY');
每日上传温度推送({
标签:day,
数据:hourlyUpload.slice()
})
}
}
}
}
dailyUpload=uqby(dailyUploadtemp,'label');
//现在我有了一个对象数组,每天上传的时间都是空的
对于(让x个上载){
if(x.hasOwnProperty('files')){
对于(x.x文件中的y){
if(y.hasOwnProperty('uploadToServerTime')){
uploadMoment=时刻(y.uploadToServerTime,['DD.MM.YYYY HH:MM:ss']);
小时=上传时刻。格式('H');
day=uploadMoment.format('DD.MM.YYYY');
for(让z代表dailyUpload){
如果(z.标签===天){
//这里有点不对劲。金额被添加到每个数据中,而不仅仅是z数据
z、 数据[小时]=(z.数据[小时]+1);
}
}
}
}
}
}
设ctx=document.getElementById(“myChart”).getContext(“2d”);
设myChart=新图表(ctx,{
键入:“行”,
数据:{
标签:['00:00','01:00','02:00','03:00','04:00','05:00','06:00','07:00','08:00','09:00','10:00','11:00','12:00','13:00','14:00','15:00','16:00','17:00'
dailyUploadtemp.push({
    label: day,
    data: hourlyUpload.slice()
})