Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.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 如何从Ajax响应中将数组数据与日期分组?_Javascript_Jquery_Arrays_Ajax - Fatal编程技术网

Javascript 如何从Ajax响应中将数组数据与日期分组?

Javascript 如何从Ajax响应中将数组数据与日期分组?,javascript,jquery,arrays,ajax,Javascript,Jquery,Arrays,Ajax,我有这样的数组数据 [{ date: "January 2019", sum: 20, name: "Persada", },{ date: "Februay 2019", sum: 21, name: "Persada", },{ date: "April 2019", sum: 22, name: "Persada", },{ date: "January 2019", sum: 10, name: "Khari

我有这样的数组数据

[{ 
   date: "January 2019",
   sum: 20,
   name: "Persada",
},{ 
   date: "Februay 2019",
   sum: 21,
   name: "Persada",
},{ 
   date: "April 2019",
   sum: 22,
   name: "Persada",
},{ 
   date: "January 2019",
   sum: 10,
   name: "Kharisma",
},{ 
   date: "March 2019",
   sum: 5,
   name: "Kharisma",
},{ 
   date: "Februari 2019",
   sum: 4,
   name: "Solusindo",
},{ 
   date: "Mai 2019",
   sum: 2,
   name: "Solusindo",
}]
["January 2019", "February 2019", "March 2019", "April 2019", "Mai 2019"]
[{
   date : ["January 2019", "February 2019", "March 2019", "April 2019", "Mai 2019"],
   sum: [20, 21, 0, 22, 0],
   name: "Persada",
},{
   date : ["January 2019", "February 2019", "March 2019", "April 2019", "Mai 2019"],
   sum: [0, 0, 10, 5, 0],
   name: "Kharisma",
},{
   date : ["January 2019", "February 2019", "March 2019", "April 2019", "Mai 2019"],
   sum: [0, 4, 0, 0, 2],
   name: "Solusindo",
}]
根据以上数据,我选择了一个不同的日期。所以我有这样的约会

[{ 
   date: "January 2019",
   sum: 20,
   name: "Persada",
},{ 
   date: "Februay 2019",
   sum: 21,
   name: "Persada",
},{ 
   date: "April 2019",
   sum: 22,
   name: "Persada",
},{ 
   date: "January 2019",
   sum: 10,
   name: "Kharisma",
},{ 
   date: "March 2019",
   sum: 5,
   name: "Kharisma",
},{ 
   date: "Februari 2019",
   sum: 4,
   name: "Solusindo",
},{ 
   date: "Mai 2019",
   sum: 2,
   name: "Solusindo",
}]
["January 2019", "February 2019", "March 2019", "April 2019", "Mai 2019"]
[{
   date : ["January 2019", "February 2019", "March 2019", "April 2019", "Mai 2019"],
   sum: [20, 21, 0, 22, 0],
   name: "Persada",
},{
   date : ["January 2019", "February 2019", "March 2019", "April 2019", "Mai 2019"],
   sum: [0, 0, 10, 5, 0],
   name: "Kharisma",
},{
   date : ["January 2019", "February 2019", "March 2019", "April 2019", "Mai 2019"],
   sum: [0, 4, 0, 0, 2],
   name: "Solusindo",
}]
然后我想像这样设置数据

[{ 
   date: "January 2019",
   sum: 20,
   name: "Persada",
},{ 
   date: "Februay 2019",
   sum: 21,
   name: "Persada",
},{ 
   date: "April 2019",
   sum: 22,
   name: "Persada",
},{ 
   date: "January 2019",
   sum: 10,
   name: "Kharisma",
},{ 
   date: "March 2019",
   sum: 5,
   name: "Kharisma",
},{ 
   date: "Februari 2019",
   sum: 4,
   name: "Solusindo",
},{ 
   date: "Mai 2019",
   sum: 2,
   name: "Solusindo",
}]
["January 2019", "February 2019", "March 2019", "April 2019", "Mai 2019"]
[{
   date : ["January 2019", "February 2019", "March 2019", "April 2019", "Mai 2019"],
   sum: [20, 21, 0, 22, 0],
   name: "Persada",
},{
   date : ["January 2019", "February 2019", "March 2019", "April 2019", "Mai 2019"],
   sum: [0, 0, 10, 5, 0],
   name: "Kharisma",
},{
   date : ["January 2019", "February 2019", "March 2019", "April 2019", "Mai 2019"],
   sum: [0, 4, 0, 0, 2],
   name: "Solusindo",
}]
如果该日期没有数据,则数据总和将自动替换为0。请帮我设置这样的数据。多谢各位

  • 从响应中提取唯一日期(使用
    Set
    Array.from
    创建初始条目)
  • 从初始日期条目创建字典(使用
    Object.entries
    创建字典表单数组)
  • 使用
    Array.prototype.reduce
    创建一个包含
    date和sum
    的字典,其中
    name
    为键
  • 使用
    Object.entries
    在字典中循环以创建结果集
  • 使用
    Object.keys
    从日期字典中提取
    日期
  • 使用
    Object.values
    从日期字典中提取
    sum
  • const响应=[{
    日期:“2019年1月”,
    总数:20,
    姓名:“Persada”,
    }, {
    日期:“2019年2月”,
    总数:21,
    姓名:“Persada”,
    }, {
    日期:“2019年4月”,
    总数:22,
    姓名:“Persada”,
    }, {
    日期:“2019年1月”,
    总数:10,
    姓名:“哈利斯马”,
    }, {
    日期:“2019年3月”,
    总数:5,
    姓名:“哈利斯马”,
    }, {
    日期:“2019年2月”,
    总数:4,
    名称:“Solusindo”,
    }, {
    日期:“2019年5月”,
    总数:2,
    名称:“Solusindo”,
    }];
    const initialValues=Array.from(新集合(response.map(({date})=>date)),date=>[date,0]);
    const dictionary=response.reduce((acc{
    日期,
    总和
    名称
    }) => {
    acc[name]=acc[name]| | Object.fromEntries(初始值);
    会计科目[名称][日期]=(会计科目[名称][日期]| 0)+总和;
    返回acc;
    }, {});
    const result=Object.entries(dictionary.map)([name,sumByDate])=>({
    日期:Object.keys(sumByDate),
    总和:对象值(sumByDate),
    名称
    }));
    控制台日志(结果)
    
    。作为控制台包装器{
    最大高度:100vh!重要;
    排名:0;
    }
    1)构建一个具有唯一键的对象,如
    name
    和sum、date、name的值。
    2) 使用
    forEach
    循环检查数据,如果键不存在,则将
    sum
    的默认值与数组大小为日期的“0”数组相加。
    3) 更新相应的
    sum
    值。
    4) 在函数中,将
    res
    的对象值作为数组返回

    const update=data=>{
    常数日期=[
    “2019年1月”,
    “2019年2月”,
    “2019年3月”,
    “2019年4月”,
    “2019年5月”
    ];
    //或者,你也可以选择这样的日期
    //const dates=[…新集合(data.map(({date}=>date))];
    const sums=dates.map(x=>0);
    常数res={};
    data.forEach({name,sum,date})=>{
    如果(!res[name]){
    res[name]={date:[…dates],sum:[…sums],name};
    }
    const index=dates.findIndex(月=>month==date);
    如果(索引!=-1){
    res[name][“sum”][index]=sum;
    }
    });
    返回Object.values(res);
    };
    常数数据=[
    {
    日期:“2019年1月”,
    总数:20,
    姓名:“Persada”
    },
    {
    日期:“2019年2月”,
    总数:21,
    姓名:“Persada”
    },
    {
    日期:“2019年4月”,
    总数:22,
    姓名:“Persada”
    },
    {
    日期:“2019年1月”,
    总数:10,
    姓名:“哈利斯马”
    },
    {
    日期:“2019年3月”,
    总数:5,
    姓名:“哈利斯马”
    },
    {
    日期:“2019年2月”,
    总数:4,
    名称:“Solusindo”
    },
    {
    日期:“2019年5月”,
    总数:2,
    名称:“Solusindo”
    }
    ];
    
    控制台日志(更新(数据))我发现以正确的格式从服务器/数据库返回数据更有用。