我有一个如下所示的 JSON
var data = [
{ "year": 2013, "month": 10, "week": 41, "changes": 1590 },
{ "year": 2013, "month": 10, "week": 42, "changes": 0 },
{ "year": 2013, "month": 10, "week": 43, "changes": 2008 },
{ "year": 2013, "month": 10, "week": 44, "changes": 3900 },
{ "year": 2014, "month": 10, "week": 41, "changes": 1052 },
{ "year": 2014, "month": 10, "week": 42, "changes": 0 },
{ "year": 2014, "month": 10, "week": 43, "changes": 10122 },
{ "year": 2014, "month": 10, "week": 44, "changes": 1461 },
{ "year": 2015, "month": 10, "week": 41, "changes": 682 },
{ "year": 2015, "month": 10, "week": 42, "changes": 0 },
{ "year": 2015, "month": 10, "week": 43, "changes": 244 },
{ "year": 2015, "month": 10, "week": 44, "changes": 21 }
];
我想生成这个 JSON 之类的东西
var firstYear = "2013";
var secondYear = "2014";
var thildYear = "2015";
var sampleData = [
{ "week": 41, "firstYear": 1590, "secondYear": 1052, "thildYear": 682 },
{ "week": 42, "firstYear": 0, "secondYear": 0, "thildYear": 0 },
{ "week": 43, "firstYear": 2008, "secondYear": 10122, "thildYear": 244 },
{ "week": 44, "firstYear": 858, "secondYear": 1461, "thildYear": 21 }
];
我写了一段代码,但它不起作用
var jsonObjdata = [];
var yearExist = "";
var weekExist = "";
var SampleRequestBody = {};
$.each(data, function (key, value) {
if (value.year != yearExist) {
SampleRequestBody.week = value.week;
SampleRequestBody.firstYear = value.changes;
yearExist = value.year;
}
else if (value.year == yearExist && value.week == weekExist + 1) {
SampleRequestBody.secondYear = value.changes;
}
else if (value.year == yearExist && value.week == weekExist + 1) {
SampleRequestBody.thildYear = value.changes;
jsonObjdata.push(SampleRequestBody);
}
});
你能帮我吗?
最佳答案
这是使用 array.prototype.reduce 的另一种方式。 :
var weeks = [], flatData;
flatData = data.reduce(function(outData, obj) {
var tmp = {}, prop = 'year' + obj.year;
if ((idx = weeks.indexOf(obj.week)) >= 0) {
outData[idx][prop] = obj.changes;
} else {
weeks.push(obj.week);
tmp['week'] = obj.week;
tmp[prop] = obj.changes;
outData.push(tmp);
}
return outData;
}, []);
它将返回一个像这样的对象数组:
week year2013 year2014 year2015
---- -------- -------- --------
41 1590 1052 682
42 0 0 0
43 2008 10122 244
44 3900 1461 21
演示 fiddle :http://jsfiddle.net/abhitalks/kLg5f1wk/ (检查控制台)
演示片段: (检查控制台)
var data = [
{ "year": 2013, "month": 10, "week": 41, "changes": 1590 },
{ "year": 2013, "month": 10, "week": 42, "changes": 0 },
{ "year": 2013, "month": 10, "week": 43, "changes": 2008 },
{ "year": 2013, "month": 10, "week": 44, "changes": 3900 },
{ "year": 2014, "month": 10, "week": 41, "changes": 1052 },
{ "year": 2014, "month": 10, "week": 42, "changes": 0 },
{ "year": 2014, "month": 10, "week": 43, "changes": 10122 },
{ "year": 2014, "month": 10, "week": 44, "changes": 1461 },
{ "year": 2015, "month": 10, "week": 41, "changes": 682 },
{ "year": 2015, "month": 10, "week": 42, "changes": 0 },
{ "year": 2015, "month": 10, "week": 43, "changes": 244 },
{ "year": 2015, "month": 10, "week": 44, "changes": 21 }
], weeks = [], flatData;
flatData = data.reduce(function(outData, obj) {
var tmp = {}, prop = 'year' + obj.year;
if ((idx = weeks.indexOf(obj.week)) >= 0) {
outData[idx][prop] = obj.changes;
} else {
weeks.push(obj.week);
tmp['week'] = obj.week;
tmp[prop] = obj.changes;
outData.push(tmp);
}
return outData;
}, []);
console.table(flatData);
关于javascript - 在 jquery 中创建新的垂直 json 到水平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33539276/