Группировать по конкретным и вычислять общее для динамически добавленных объектов Angular 2 - PullRequest
0 голосов
/ 24 июня 2018

У меня есть форма в Angular 2 с полями, которые динамически добавляются пользователем.Добавленный объект выглядит следующим образом:

[ { "equipment_type_id": 1, "action": "added", "quantity": 3}]

Тип оборудования может дублироваться несколько раз с разными количествами, мне нужно сгруппировать по equipment_type_id и рассчитать итоговые значения, используя количество.

У меня естьиспользовал функцию уменьшения для группировки, но я не уверен, как вычислить итоговое значение, а не просто добавить количество к новому объекту

var groups = this.inspection.equipments.reduce(function(obj,item){
  obj[item.equipment_type_id] = obj[item.equipment_type_id] || [];
  obj[item.equipment_type_id].push(item.quantity);
  return obj;
}, {});

Любая помощь для этого была бы потрясающей

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Исправлено это с помощью следующего:

calcTotals(){
    var groups = this.inspection.equipments.reduce(function(obj,item){
      obj[item.equipment_type_id] = obj[item.equipment_type_id] || { equipment_type_id: item.equipment_type_id, total: 0};
      // Calculate total based on action
      var total = obj[item.equipment_type_id].total;
      if(item.action === 'added'){
        total = total + item.quantity;
      }else{
        total = total - item.quantity;
      };
      obj[item.equipment_type_id].total = total;
      return obj;
    }, {});
    return groups;
}
0 голосов
/ 24 июня 2018

Во-первых, вам нужно проверить, был ли элемент этого типа уже добавлен или нет:

if (obj[item.equipment_type_id] == null)

Если он есть (т. Е. Приведенный выше оператор if ложен), то просто добавьте новыйколичество:

obj[item.equipment_type_id].quantity += item.quantity;

Вот пример ниже

let equipments = [ 
  { "equipment_type_id": 1, "action": "added", "quantity": 3},
  { "equipment_type_id": 1, "action": "added", "quantity": 5},
  { "equipment_type_id": 2, "action": "added", "quantity": 4}
]

var groups = equipments.reduce(function(obj,item) {
  if (obj[item.equipment_type_id] == null) {
    obj[item.equipment_type_id] = item;
  } else {
    obj[item.equipment_type_id].quantity += item.quantity;
  }
  return obj;
}, {});

console.log(groups);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...