I have an array objects of market ticks with the following values:
candles['AUDIOUSDT'] = [
{
t: 1649936820000,
o: 41044.99,
c: 41052.21,
h: 41063.84,
l: 41044.99,
v: 1.2067
},
{
t: 1649936820000,
o: 41044.99,
c: 41045,
h: 41063.84,
l: 41044.99,
v: 1.3728
},
{
t: 1649936880000,
o: 41044.99,
c: 41045,
h: 41063.84,
l: 41044.99,
v: 0.1
},
{
t: 1649936880000,
o: 41044,
c: 41049,
h: 41049,
l: 41011,
v: 1
}
]
and I would like to have last time of each time in array object:
candles['AUDIOUSDT'] = [
{
t: 1649936820000,
o: 41060.01,
c: 41045,
h: 41063.84,
l: 41044.99,
v: 1.3728
},
{
t: 1649936880000,
o: 41044,
c: 41049,
h: 41049,
l: 41011,
v: 1
}
Basically, I want to merge values if t, o, c, h, l, v which are the same time, any ideas on how to elegantly do this?
Thanks in advance
CodePudding user response:
So, it just requires you to do a backwards loop and check if the "t" value is already in a unique times list. If it is, it will skip it, else it will add the entire object to a new uniques
array which holds the results.
// where the unique times will be held
let unique_times = [];
// where the unique results will be held
let uniques = [];
// loop through the array backwards
for (var i = candles['AUDIOUSDT'].length; i--;) {
// if current time in object is already in the unique_times array, skip over it
if (unique_times.indexOf(candles['AUDIOUSDT'][i].t) > -1) {continue;}
// adds the current time to this array, so the loop knows it's been added and doesn't count it again
unique_times.push(candles['AUDIOUSDT'][i].t);
// adds the current object to the new results
uniques.push(candles['AUDIOUSDT'][i]);
}
// 'uniques' holds the filtered array of objects
console.log(uniques);