请看这个例子:JsFiddle
问题:我有以下内容 JSON Array
y= [ {"LngTrend":15,"DblValue":10,"DtmStamp":1358226000000},
{"LngTrend":16,"DblValue":92,"DtmStamp":1358226000000},
{"LngTrend":17,"DblValue":45,"DtmStamp":1358226000000},
{"LngTrend":18,"DblValue":87,"DtmStamp":1358226000000},
{"LngTrend":15,"DblValue":10,"DtmStamp":1358226060000},
{"LngTrend":16,"DblValue":87,"DtmStamp":1358226060000},
{"LngTrend":17,"DblValue":45,"DtmStamp":1358226060000},
{"LngTrend":18,"DblValue":92,"DtmStamp":1358226060000} ]
Run Code Online (Sandbox Code Playgroud)
我试图将这些对象分组,DtmStamp最后得到这样的东西:
x = [[1358226000000,10,92,45,87],[1358226060000,10,87,45,92], .......]
Run Code Online (Sandbox Code Playgroud)
换一种说法:
x[0][0] = y[0].DtmStamp ;
x[0][1] = y[0].LngTrend ;
x[0][2] = y[1].LngTrend ;
x[0][3] = y[2].LngTrend ;
x[0][4] = y[3].LngTrend ;
Run Code Online (Sandbox Code Playgroud)
不幸的是,它以我不想要的东西结束.
这是我到目前为止所尝试的:
var dataTrendArray = [];
$.each(x, function (index, value) {
var trendArray = [];
if (index % 4 == 0) {
trendArray.push(x[index].DtmStamp);
for (var i = 0; i < 4; i++) {
index = eval(index + i);
trendArray.push(x[index].DblValue);
}
}
console.log(trendArray) ;
dataTrendArray.push(trendArray);
});
Run Code Online (Sandbox Code Playgroud)
有人能帮助我走上正确的道路吗?
cru*_*ush 17
您可以将JavaScript对象用作类似于地图的键/值数据结构.属性名称将用作键,而属性值将用作值.这将允许您分组.
var y = [
{"LngTrend":15,"DblValue":10,"DtmStamp":1358226000000},
{"LngTrend":16,"DblValue":92,"DtmStamp":1358226000000},
{"LngTrend":17,"DblValue":45,"DtmStamp":1358226000000},
{"LngTrend":18,"DblValue":87,"DtmStamp":1358226000000},
{"LngTrend":15,"DblValue":10,"DtmStamp":1358226060000},
{"LngTrend":16,"DblValue":87,"DtmStamp":1358226060000},
{"LngTrend":17,"DblValue":45,"DtmStamp":1358226060000},
{"LngTrend":18,"DblValue":92,"DtmStamp":1358226060000},
];
var x = {};
for (var i = 0; i < y.length; ++i) {
var obj = y[i];
//If a property for this DtmStamp does not exist yet, create
if (x[obj.DtmStamp] === undefined)
x[obj.DtmStamp] = [obj.DtmStamp]; //Assign a new array with the first element of DtmStamp.
//x will always be the array corresponding to the current DtmStamp. Push a value the current value to it.
x[obj.DtmStamp].push(obj.DblValue);
}
console.log(x); //x is now an object grouped by DtmStamp. You can easily turn it back into an array here.
Run Code Online (Sandbox Code Playgroud)
你应该使用哈希.哈希将允许您轻松索引所有DblValue值DtmStamp.这是一个完整的工作示例:
var y = [ {"LngTrend":15,"DblValue":10,"DtmStamp":1358226000000},
{"LngTrend":16,"DblValue":92,"DtmStamp":1358226000000},
{"LngTrend":17,"DblValue":45,"DtmStamp":1358226000000},
{"LngTrend":18,"DblValue":87,"DtmStamp":1358226000000},
{"LngTrend":15,"DblValue":10,"DtmStamp":1358226060000},
{"LngTrend":16,"DblValue":87,"DtmStamp":1358226060000},
{"LngTrend":17,"DblValue":45,"DtmStamp":1358226060000},
{"LngTrend":18,"DblValue":92,"DtmStamp":1358226060000} ];
var x = {};
var i = 0;
while(i++ < y.length) {
var key = y[i].DtmStamp.toString();
if (typeof(x[key]) == "undefined") x[key] = [];
x[key].push(y[i].DblValue);
}
alert(JSON.stringify(x));
Run Code Online (Sandbox Code Playgroud)
关键是对要分组的值使用哈希值.
结果:
{
"1358226060000": [
92,
45,
87,
10
],
"1358226000000": [
87,
45,
92,
10
]
}
Run Code Online (Sandbox Code Playgroud)
如果要防止重复,可以通过添加if/then逻辑来实现indexOf().