[Vuejs]-How to read values and sum over a dynamic array?

0๐Ÿ‘

โœ…

You could use reduce method and return one object with object as values.

const data = [{"channel":"A","mkp":"ABC","qtd":6,"total":2938.2,"data":"2019-02-16","time":"22:30:40"},{"channel":"C","mkp":"DEF","qtd":1545,"total":2127229.64,"data":"2019-02-20","time":"17:19:49"},{"channel":"C","mkp":"JKL","qtd":976,"total":1307328.37,"data":"2019-02-20","time":"17:19:53"},{"channel":"U","mkp":"PQR","qtd":77,"total":98789.87,"data":"2019-02-20","time":"16:12:31"},{"channel":"U","mkp":"STU","qtd":427,"total":433206.62,"data":"2019-02-20","time":"17:04:27"}]

const res = data.reduce((r, {channel, qtd, total, data, time}) => {
  const dateTime = `${data} ${time}`
  if(!r[channel]) r[channel] = {qtd, total, dateTime}
  else {
    r[channel].total += total
    r[channel].qtd += qtd;
    r[channel].dateTime = dateTime
  }
  return r;
}, {})

console.log(res)

0๐Ÿ‘

You an use reduce to group the values based on channel like this:

const input = [{"channel":"A","mkp":"ABC","qtd":6,"total":2938.2,"data":"2019-02-16","time":"22:30:40"},{"channel":"C","mkp":"DEF","qtd":1545,"total":2127229.64,"data":"2019-02-20","time":"17:19:49"},{"channel":"C","mkp":"JKL","qtd":976,"total":1307328.37,"data":"2019-02-20","time":"17:19:53"},{"channel":"U","mkp":"PQR","qtd":77,"total":98789.87,"data":"2019-02-20","time":"16:12:31"},{"channel":"U","mkp":"STU","qtd":427,"total":433206.62,"data":"2019-02-20","time":"17:04:27"}]

const merged = input.reduce((acc, { channel, qtd, total, data, time }) => {
  acc[channel] = acc[channel] || [{ qtd: 0, total: 0, dateTime:'' }];
  const group = acc[channel][0];
  group.qtd += qtd;
  group.total += total;
  
  const dateTime = `${data} ${time}`
  if(dateTime > group.dateTime)
    group.dateTime = dateTime;
    
  return acc;
}, {})

console.log(merged)

Leave a comment