我希望有人能指出我正确的方向。我有一个数组,其中包含Date,Set和Value as Properties的对象数
我需要在客户端将其转换为数组,其中每个成员数组都包含如下数据:[日期,集合0的值,集合1的值]
我正在寻找一种适用于任何数量的“套装”的解决方案,这对我来说很复杂。任何建议的解决方案可能需要jQuery或其他一些javascript库设置来完成这项工作。我没有问题,让我们完成它。 :)
请参考下面的初始和结束数据集:
第一个只有两组:
var data = [
{ Date: "2/10/2013", Set: 0, Value: 1 },
{ Date: "2/10/2013", Set: 1, Value: 0 },
{ Date: "2/11/2013", Set: 0, Value: 15 },
{ Date: "2/11/2013", Set: 1, Value: 8 },
{ Date: "2/12/2013", Set: 0, Value: 12 },
{ Date: "2/12/2013", Set: 1, Value: 11 },
{ Date: "2/13/2013", Set: 0, Value: 15 },
{ Date: "2/13/2013", Set: 1, Value: 19 },
{ Date: "2/14/2013", Set: 0, Value: 10 },
{ Date: "2/14/2013", Set: 1, Value: 20 }
];
var endData = [
[ "2/10/2013", 1, 0 ],
[ "2/11/2013", 15, 8 ],
[ "2/12/2013", 12, 11 ],
[ "2/13/2013", 15, 19 ],
[ "2/14/2013", 10, 20 ]
];
以下是3套的例子。 所以,例如,如果数据是这样的:
var data = [
{ Date: "2/10/2013", Set: 0, Value: 1 },
{ Date: "2/10/2013", Set: 1, Value: 2 },
{ Date: "2/10/2013", Set: 2, Value: 3 },
{ Date: "2/11/2013", Set: 0, Value: 10 },
{ Date: "2/11/2013", Set: 1, Value: 15 },
{ Date: "2/11/2013", Set: 2, Value: 20 }
];
返回的数组必须是这样的:
var endData = [
[ "2/10/2013", 1, 2, 3 ],
[ "2/10/2013", 10, 15, 20 ]
];
任何指针都表示赞赏。
答案 0 :(得分:4)
使用循环和全局dat
变量来跟踪您在列表中的位置:
var endData=[], dat='', row=[];
for (var i=0; i<data.length; i++) {
var obj=data[i], val=obj.Value;
if (dat!=obj.Date) {
if (i) endData.push(row);
dat = obj.Date;
row = [dat, val];
} else {
row.push(val);
}
}
endData.push(row); // last one
答案 1 :(得分:1)
;(function() {
var data = [
{ Date: "2/10/2013", Set: 0, Value: 1 },
{ Date: "2/10/2013", Set: 1, Value: 0 },
{ Date: "2/11/2013", Set: 0, Value: 15 },
{ Date: "2/11/2013", Set: 1, Value: 8 },
{ Date: "2/12/2013", Set: 0, Value: 12 },
{ Date: "2/12/2013", Set: 1, Value: 11 },
{ Date: "2/13/2013", Set: 0, Value: 15 },
{ Date: "2/13/2013", Set: 1, Value: 19 },
{ Date: "2/14/2013", Set: 0, Value: 10 },
{ Date: "2/14/2013", Set: 1, Value: 20 }
];
var endData = {};
for (var i = 0; i < data.length; ++i) {
var date = data[i].Date;
if (endData[date] === undefined)
endData[date] = [];
endData[date].push(data[i].Value);
}
var finalData = [];
for (var ed in endData) {
var a = [ed];
for (var i = 0; i < endData[ed].length; ++i) {
a.push(endData[ed][i]);
}
finalData.push(a);
}
console.log(finalData);
})();
输出如下:
var finalData = [
["2/10/2013", 1, 0],
["2/11/2013", 15, 8],
["2/12/2013", 12, 11],
["2/13/2013", 15, 19],
["2/14/2013", 10, 20]
];
答案 2 :(得分:1)
var endData = [];
var indexes = {};
for(var i = 0, len = data.length; i < len; i++) {
if(indexes[data[i].Date] === undefined) {
indexes[data[i].Date] = endData.length;
endData.push([data[i].Date]);
}
endData[indexes[data[i].Date]][data[i].Set + 1] = data[i].Value;
}