Please see this example: JsFiddle
Question: I have the following 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} ]
I was trying to group these object by DtmStamp
end up having something like this :
x = [[1358226000000,10,92,45,87],[1358226060000,10,87,45,92], .......]
In other words:
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 ;
Unfortunately, it ends with something I don't want.
Here is what I have tried so far:
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);
});
Can someone help me get on the right path?
The most efficient method to group by a key on an array of objects in js is to use the reduce function. The reduce() method executes a reducer function (that you provide) on each element of the array, resulting in a single output value.
One can use filter() function in JavaScript to filter the object array based on attributes. The filter() function will return a new array containing all the array elements that pass the given condition. If no elements pass the condition it returns an empty array.
The Array. indexOf() method returns the index of the first matching item in an array (or -1 if it doesn't exist). var wizards = ['Gandalf', 'Radagast', 'Saruman', 'Alatar']; // Returns 1 wizards.
You can leverage JavaScript objects as a key/value data structure similar to a map. The property name will serve as the key, while the property value will serve as the value. This will allow you to group.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With