Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.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:转置json数据_Javascript - Fatal编程技术网

Javascript:转置json数据

Javascript:转置json数据,javascript,Javascript,我有以下json数据,并希望将收入转换为各个年份的价值: 当前数据: [{"year": 2017, "month": "Jan", "revenue": 2000}, {"year": 2017, "month": "Feb", "revenue": 3000}, {"year": 2017, "month": "Mar", "revenue": 1000}, {"year": 2016, "month": "Jan", "revenue": 5000}, {"year": 2016, "m

我有以下json数据,并希望将收入转换为各个年份的价值:

当前数据:

[{"year": 2017, "month": "Jan", "revenue": 2000},
{"year": 2017, "month": "Feb", "revenue": 3000},
{"year": 2017, "month": "Mar", "revenue": 1000},
{"year": 2016, "month": "Jan", "revenue": 5000}, 
{"year": 2016, "month": "Feb", "revenue": 4000}, 
{"year": 2016, "month": "Mar" "revenue": 2000}]
预期产出:

[{Month: "Jan", "2017": 2000, "2016": 5000},
{Month: "Feb", "2017": 3000, "2016": 4000},
{Month: "Mar", "2017": 1000, "2016": 2000}]

我一直在尝试不同的方法,但没有成功。此外,将来我可能会有不同于一月到三月的月份,因此任何解决方案都不限于三个月。

基本计划是创建一个新对象,并将其键入该月份,然后每年添加
recduce()
使其非常简洁:

让日期=[{“年”:2017,“月”:“一月”,“收入”:2000},{“年”:2017,“月”:“二月”,“收入”:3000},{“年”:2017,“月”:“三月”,“收入”:1000},{“年”:2016,“月”:“一月”,“收入”:5000},{“年”:2016,“月”:“二月”,“收入”:4000},{“年”:2016,“月”:“三月”,“收入”:2000}]
//您只需要一个值数组,因此只需返回
//Object.values()
设d=Object.values(dates.reduce)(a,c)=>{
//使用现有条目或创建新条目
//月份已经定了
(a[c.month]| |(a[c.month]={month:c.month}))[c.year]=c.revenue
归还
}, {}))

console.log(d)
一个基本的计划是创建一个新的对象,该对象被设置为月份的键,并在每年的执行过程中添加
recduce()
使其非常简洁:

让日期=[{“年”:2017,“月”:“一月”,“收入”:2000},{“年”:2017,“月”:“二月”,“收入”:3000},{“年”:2017,“月”:“三月”,“收入”:1000},{“年”:2016,“月”:“一月”,“收入”:5000},{“年”:2016,“月”:“二月”,“收入”:4000},{“年”:2016,“月”:“三月”,“收入”:2000}]
//您只需要一个值数组,因此只需返回
//Object.values()
设d=Object.values(dates.reduce)(a,c)=>{
//使用现有条目或创建新条目
//月份已经定了
(a[c.month]| |(a[c.month]={month:c.month}))[c.year]=c.revenue
归还
}, {}))
console.log(d)
您可以使用ES6语法使用您拥有的数据构建阵列

const值=[{
年份:2017年,
月份:“一月”,
收入:2000年,
},
{
年份:2017年,
月份:“二月”,
收入:3000,
},
{
年份:2017年,
月份:“三月”,
收入:1000,
},
{
年份:2016年,
月份:“一月”,
收入:5000,
},
{
年份:2016年,
月份:“二月”,
收入:4000,
},
{
年份:2016年,
月份:“三月”,
收入:2000年,
}
];
//使用解构来访问每个数据
const transformedValues=values.reduce((tmp{
月,
年,
收入
}) => {
//在tmp中查找月份
const monthInTmp=tmp.find(y=>y.Month==Month);
//如果它不存在,请按它
如果(!monthInTmp){
推({
月:月,,
//使用以下语法[var]来使用动态键
[年度]:收入,
});
返回tmp;
}
//如果存在,请更新它
//当我们在同一年有两项收入时处理该案件
如果(月/年){
monthInTmp【年】+=收入;
返回tmp;
}
monthInTmp【年】=收入;
返回tmp;
}, []);
console.log(transformedValues)您可以使用ES6语法使用您拥有的数据构建阵列

const值=[{
年份:2017年,
月份:“一月”,
收入:2000年,
},
{
年份:2017年,
月份:“二月”,
收入:3000,
},
{
年份:2017年,
月份:“三月”,
收入:1000,
},
{
年份:2016年,
月份:“一月”,
收入:5000,
},
{
年份:2016年,
月份:“二月”,
收入:4000,
},
{
年份:2016年,
月份:“三月”,
收入:2000年,
}
];
//使用解构来访问每个数据
const transformedValues=values.reduce((tmp{
月,
年,
收入
}) => {
//在tmp中查找月份
const monthInTmp=tmp.find(y=>y.Month==Month);
//如果它不存在,请按它
如果(!monthInTmp){
推({
月:月,,
//使用以下语法[var]来使用动态键
[年度]:收入,
});
返回tmp;
}
//如果存在,请更新它
//当我们在同一年有两项收入时处理该案件
如果(月/年){
monthInTmp【年】+=收入;
返回tmp;
}
monthInTmp【年】=收入;
返回tmp;
}, []);

console.log(transformedValues)我一直在尝试不同的方法,但没有成功您应该将该代码发布到请添加您尝试过的方法,使您最接近您想要的内容,作为一个示例,这可能有助于您开始:我一直在尝试不同的方法,但没有成功您应该将该代码发布到请添加您尝试过的方法,使您最接近您想要的内容作为一个示例帮助你开始:Thanx很多。除了接受它作为公认的答案,我希望我也能给你一个拥抱:)Thanx很多。除了接受它作为被接受的答案,我希望我也能给你一个拥抱:)