Javascript 将json转换为不同格式
我有这种格式的JSON。 我想不出这个问题 我将Object.values和Object.keys与Array.prototype.map()一起使用,但我的算法没有达到我想要的效果Javascript 将json转换为不同格式,javascript,arrays,json,reactjs,Javascript,Arrays,Json,Reactjs,我有这种格式的JSON。 我想不出这个问题 我将Object.values和Object.keys与Array.prototype.map()一起使用,但我的算法没有达到我想要的效果 [ { "2018-01-01": [ { "firstname": "mati", "lastname": "mati", "userid": null, "total_minutes": 0, "free_minutes": 480, "task_date":
[
{
"2018-01-01": [
{
"firstname": "mati",
"lastname": "mati",
"userid": null,
"total_minutes": 0,
"free_minutes": 480,
"task_date": "2018-01-01"
},
{
"firstname": "andrzej",
"lastname": "owsianka",
"userid": null,
"total_minutes": 0,
"free_minutes": 480,
"task_date": "2018-01-01"
},
{
"firstname": "asd",
"lastname": "asd",
"userid": null,
"total_minutes": 0,
"free_minutes": 480,
"task_date": "2018-01-01"
}
],
"2018-01-02": [
{
"firstname": "mati",
"lastname": "mati",
"userid": null,
"total_minutes": "70",
"task_date": "2018-01-02",
"free_minutes": 410
},
{
"firstname": "andrzej",
"lastname": "owsianka",
"userid": null,
"total_minutes": "360",
"task_date": "2018-01-02",
"free_minutes": 120
},
{
"firstname": "asd",
"lastname": "asd",
"userid": null,
"total_minutes": "30",
"task_date": "2018-01-02",
"free_minutes": 450
}
],
"2018-01-03": [
{
"firstname": "mati",
"lastname": "mati",
"userid": null,
"total_minutes": "0",
"task_date": "2018-01-03",
"free_minutes": 480
},
{
"firstname": "andrzej",
"lastname": "owsianka",
"userid": null,
"total_minutes": 0,
"free_minutes": 480,
"task_date": "2018-01-03"
},
{
"firstname": "asd",
"lastname": "asd",
"userid": null,
"total_minutes": 0,
"free_minutes": 480,
"task_date": "2018-01-03"
}
]
}
]
我想得到这种格式的JSON,或者非常类似于这种格式的JSON
[
{
"firstname": "mati",
"lastname": "mati",
"2018-01-01": "480",
"2018-01-02": 480,
"2018-01-03": 480
},
{
"firstname": "andrzej",
"lastname": "owsianka",
"2018-01-01": "480",
"2018-01-02": 480,
"2018-01-03": 480
},
{
"firstname": "asd",
"lastname": "asd",
"2018-01-01": "480",
"2018-01-02": 480,
"2018-01-03": 480
}
]
我要如何映射数据才能得到这样的结果?
我花了大约2个小时来解决这个问题,但我没有发明任何意义。您应该在一个简单的结果累加器中迭代并累加所有嵌套部分,这是伪代码:
var result=[];
for each dates in json
for each date in dates
for each entry in date
result[]=entry;
您需要使用
reduce
和forEach
,并根据firstname
和lastname
映射日期
var output = Object.values( arr.reduce( function(a, c){
Object.keys( c ).forEach( function( date ){
var arr2 = c[ date ];
arr2.forEach( function(item){
var keyObj = {firstname:item.firstname, lastname:item.lastname};
var key = JSON.stringify( keyObj );
a[ key ] = a[ key ] || keyObj;
a[ key ][date] = item.free_minutes;
});
});
return a;
} ,{}));
演示
var-arr=[{
"2018-01-01": [{
“名字”:“马蒂”,
“姓氏”:“mati”,
“userid”:null,
“总分钟数”:0,
“自由分钟”:480,
“任务日期”:“2018-01-01”
},
{
“名字”:“安德烈”,
“姓氏”:“owsianka”,
“userid”:null,
“总分钟数”:0,
“自由分钟”:480,
“任务日期”:“2018-01-01”
},
{
“名字”:“asd”,
“姓氏”:“asd”,
“userid”:null,
“总分钟数”:0,
“自由分钟”:480,
“任务日期”:“2018-01-01”
}
],
"2018-01-02": [{
“名字”:“马蒂”,
“姓氏”:“mati”,
“userid”:null,
“总分钟数”:“70”,
“任务日期”:“2018-01-02”,
“自由分钟”:410
},
{
“名字”:“安德烈”,
“姓氏”:“owsianka”,
“userid”:null,
“总分钟数”:“360”,
“任务日期”:“2018-01-02”,
“自由分钟”:120
},
{
“名字”:“asd”,
“姓氏”:“asd”,
“userid”:null,
“总分钟数”:“30”,
“任务日期”:“2018-01-02”,
“自由分钟”:450
}
],
"2018-01-03": [{
“名字”:“马蒂”,
“姓氏”:“mati”,
“userid”:null,
“总分钟数”:“0”,
“任务日期”:“2018-01-03”,
“自由分钟”:480
},
{
“名字”:“安德烈”,
“姓氏”:“owsianka”,
“userid”:null,
“总分钟数”:0,
“自由分钟”:480,
“任务日期”:“2018-01-03”
},
{
“名字”:“asd”,
“姓氏”:“asd”,
“userid”:null,
“总分钟数”:0,
“自由分钟”:480,
“任务日期”:“2018-01-03”
}
]
}];
变量输出=对象值(arr.reduce(函数a,c){
Object.key(c).forEach(函数(日期){
var arr2=c[日期];
arr2.forEach(功能(项目){
var keyObj={firstname:item.firstname,lastname:item.lastname};
var key=JSON.stringify(keyObj);
a[键]=a[键]| | keyObj;
a[键][日期]=项。自由时间分钟;
});
});
返回a;
} ,{}));
控制台日志(输出)代码>请分享您的努力。Stack Overflow不是免费的代码编写服务,请展示您的代码/努力以及实际问题是什么。有您尝试过的代码示例吗?