Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

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

#javascript


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

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

Так же нужно сложить элементы из массива первого объекта с элементами из массива
второго эл и добавить в массив с суммой каждого свойства т.е объект а) [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]
  },
])



    


Ответы

Ответ 1



Так как лейблы разные, то их в любом случае придется прописывать. Чтобы сделать функцию более универсальной ( и не для только лишь 2 обхектов) можно вынести лейбл результата в объект. Я так же вынес лейбл Общая Экономия отдельно из функцию, но можно задавать его и внутри. function chartSumm(arr, sumLabel, elementSumLabel) { var result = {}; result[sumLabel] = 0; result[elementSumLabel] = [0, 0, 0, 0, 0, 0] arr.forEach(function(item, index) { result[item.resultLabel] = 0; for (var i = 0; i < item.data.length; i++) { result[elementSumLabel][i] += item.data[i]; result[item.resultLabel] += item.data[i] } result[sumLabel] += result[item.resultLabel]; }); return result; } var info = chartSumm([{ label: 'Эккономия на аннуляции', resultLabel: 'Цена у стойки', backgroundColor: '#ef9d4d', data: [1000, 400, 1500, 1500, 3000, 4000] }, { label: 'Экономия на цене у стойки', resultLabel: 'Аннуляция без штрафа', backgroundColor: '#476e8f', data: [1170, 460, 2000, 2500, 2700, 4000] }, ], 'Общая экономия', 'Сумма элементов'); console.log(info);

Комментариев нет:

Отправить комментарий