@Fierfoxik

Как сложить два массива в массиве объектов?

Есть массив в котором находятся объекты с массивом данных.

Нужно получить сумму всех элементов массива объектов и добавить каждую сумму в объект, затем нужно получить сумму двух объектов и так же добавить в объект.

Так же нужно сложить элементы из массива первого объекта с элементами из массива второго эл и добавить в массив с суммой каждого свойства т.е объект а) [1,2,3] и объект б) [4,5,6] сложить их и получить на выходе [ 5,7,9]

Смог получить сумму двух элементов массива но вариант оказался весьма деревянным, т.к привязан к свойству первого объекта

function chartSumm(arr) {
  let obj,
    firstArr = [],
    lastArr = [],
    sumArray = []

  arr.forEach(function(item, index) {
    for (let el in item.data) {
      if (item.label === 'Эккономия на аннуляции') {
        firstArr = item.data;
      } else {
        lastArr = item.data
      }
    }
  });
  let firstObjSum = firstArr.reduce(function(prev, curr, index) {
    return prev + curr
  });
  let twoObjSum = lastArr.reduce(function(prev, curr, index) {
    return prev + curr
  });

  obj = {
    'Цена у стойки': firstObjSum,
    'Аннуляция без штрафа': twoObjSum,
    'Общая экономия': firstObjSum + twoObjSum
  };
  console.log(obj)
}

chartSumm([{
    label: 'Эккономия на аннуляции',
    backgroundColor: '#ef9d4d',
    data: [1000, 400, 1500, 1500, 3000, 4000]
  },
  {
    label: 'Экономия на цене у стойки',
    backgroundColor: '#476e8f',
    data: [1170, 460, 2000, 2500, 2700, 4000]
  },
])
  • Вопрос задан
  • 349 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Ridz
"use strict"
function chartSumm(arr) {
    let obj = {
            'Общая экономия': 0
        },
        lb = {
            'Эккономия на аннуляции': 'Аннуляция без штрафа',
            'Экономия на цене у стойки': 'Цена у стойки'
        };
    let sum = function(a, b) {
        return a + b
    }
    return arr.reduce(function(obj, el) {
        let label = el.label;
        if (label in lb) label = lb[label];
        let total = el.data.reduce(sum, 0);
        el.total = total;
        obj[label] = total;
        obj['Общая экономия'] += total;
        return obj
    }, obj)

}
let arr = [{
        label: 'Эккономия на аннуляции',
        backgroundColor: '#ef9d4d',
        data: [1000, 400, 1500, 1500, 3000, 4000]
    },
    {
        label: 'Экономия на цене у стойки',
        backgroundColor: '#476e8f',
        data: [1170, 460, 2000, 2500, 2700, 4000]
    },
];

let Summ = chartSumm(arr)

console.log(Summ, arr)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы