группа / сумма с названием - PullRequest
2 голосов
/ 01 марта 2020

После суммирования значений с той же скоростью я получаю свой объект как {10: 310, 101: 120, 110: 110, 120: 360}. Как я могу изменить свой метод Reduce, чтобы получить идентификатор элемента, записанный тоже в сгруппированном объекте, чтобы я мог легко идентифицировать.

Это мой код:

var myObjArr = [
  { itemid: 12345, desc: "this is item 12345", qty: 8, rate: 101, total: 120 },
  { itemid: 22345, desc: "this is item 22345", qty: 2, rate: 120, total: 240 },
  { itemid: 52345, desc: "this is item 52345", qty: 12, rate: 10, total: 120 },
  { itemid: 42345, desc: "this is item 42345", qty: 1, rate: 110, total: 110 },
  { itemid: 52345, desc: "this is item 52345", qty: 15, rate: 10, total: 150 },
  { itemid: 52345, desc: "this is item 52345", qty: 4, rate: 10, total: 40 },
  { itemid: 22345, desc: "this is item 22345", qty: 1, rate: 120, total: 120 }
];

// var byYear = myObjArr.map(function (item) {// by date
//   var year = new Date(Date.parse(item.date)).getFullYear();
//   return { date: year, total: item.total };
// });

var myGroupedArr = myObjArr.reduce(function (memo, item) {
  memo[item.rate] = (memo[item.rate] || 0) + item.total;
  return memo;
}, {});

console.log(myGroupedArr)//{10: 310, 101: 120, 110: 110, 120: 360}

Ответы [ 2 ]

2 голосов
/ 01 марта 2020

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

var myGroupedArr = myObjArr.reduce(function (memo, item) {
  if (!memo[item.rate]) {
    memo[item.rate] = { total: item.total, itemid: item.itemid };  
  }
  else {
    memo[item.rate].total += item.total;
  }
  return memo;
}, {});
1 голос
/ 01 марта 2020

Просто добавьте itemid и накопленный total к переменной и оберните их оба в объект.

var myObjArr = [
  { itemid: 12345, desc: "this is item 12345", qty: 8, rate: 101, total: 120 },
  { itemid: 22345, desc: "this is item 22345", qty: 2, rate: 120, total: 240 },
  { itemid: 52345, desc: "this is item 52345", qty: 12, rate: 10, total: 120 },
  { itemid: 42345, desc: "this is item 42345", qty: 1, rate: 110, total: 110 },
  { itemid: 52345, desc: "this is item 52345", qty: 15, rate: 10, total: 150 },
  { itemid: 52345, desc: "this is item 52345", qty: 4, rate: 10, total: 40 },
  { itemid: 22345, desc: "this is item 22345", qty: 1, rate: 120, total: 120 }
];


var myGroupedArr = myObjArr.reduce(function (memo, item) {
  const total = ((memo[item.rate] || {}).total || 0) + item.total;
  const {itemid} = item;
  memo[item.rate] = { total, itemid };
  return memo;
}, {});

console.log(myGroupedArr)
...