Estaba trabajando en un gráfico en el que necesito que mis datos se dividan en objetos pequeños para una mejor visibilidad. Mi matriz que tengo es
{ "size":[ { "timestamp":"1641329889000", "size":12345, "fees":123456, "cost":168 }, { "timestamp":"1641387032", "size":456789, "fees":4567891, "cost":249 }, { "timestamp":"1641435786", "size":98765, "fees":987654, "cost":987 }, { "timestamp":"1641435786", "size":98765, "fees":987654, "cost":987 }, { "timestamp":"1641435786", "size":98765, "fees":987654, "cost":987 } ] }en el que quiero que la matriz esté en esta forma
{ "size":{ "timestamp": ["1641329889000","1641387032","1641435786"], "size": [12345,456789,98765], "fees": [123456,4567891,987654], "cost": [168,249,987] } }Puedo lograr esto usando foreach y empujar así
result.forEach(element => { this.state.timestamp.push(element.timestamp); this.state.size.push(element.size); });Pero quiero que esta matriz tenga los elementos solo del índice 10,20,30,40 solo, no quiero todo el valor. los valores deben elegirse solo en base a x + 10 ¿Alguien podría ayudarme en esto?
Podría tomar un bucle for y un paso para incrementar el índice.
const step = 10, keys = ["timestamp", "size", "fees", "cost"], result = Object.fromEntries(keys.map(k => [k, []])); for (let i = 0; i < size.lenght; i += step) { keys.forEach(key => result[key].push(size[i][key])); }Usar forEach es un desperdicio de recursos. Puedes usar for en su lugar:
for(let i=0;i<result.length;i+10){ this.state.timestamp.push(result[i].timestamp); this.state.size.push(result[i].size); } Para configurar el estado, debe usar setState no solo presionarlo.
let tmp = { ...this.state } for(let i=0;i<result.length;i+10){ tmp.size.timestamp.push(result[i].timestamp); tmp.size.push(result[i].size); } this.setState(tmp)En lugar de forEach ¿por qué no usar un bucle for y, con la condición, usar el operador de % de módulo con 10? Como if (i % 10 == 0) dentro del ciclo for, o simplemente incremente i en 10 como i+=10 .