EAGLE

by Vladymyr Shevchuk

JavaScript

const data = [
  {
    field1: {
      name: 'riba-1'
    },
    field2: {
      name: 'riba-2'
    },
    field3: {
      name: 'riba-4'
    },
    total: 10
  },
  {
    field1: {
      name: 'riba-1'
    },
    field2: {
      name: 'riba-2'
    },
    field3: {
      name: 'riba-5'
    },
    total: 20
  },
  {
    field1: {
      name: 'riba-1'
    },
    field2: {
      name: 'riba-3'
    },
    field3: {
      name: 'riba-6'
    },
    total: 30
  },
  {
    field1: {
      name: 'riba-1'
    },
    field2: {
      name: 'riba-3'
    },
    field3: {
      name: 'riba-7'
    },
    total: 40
  }
];

const fields = ['field1', 'field2', 'field3'];
const fieldsGroups = fields.map(item => R.uniq(data.map(el => el[item], 0)));

console.log('fieldsGroups', fieldsGroups);

const result = fieldsGroups.map((group, index) => {
  return group.map(item => {
    return {
      name: item.name,
      total: data.reduce((accum, el) => {
        return el[fields[index]].name === item.name ? accum + el.total : accum + 0;
      }, 0)
    }
  })
});

console.log('result', result);