JS Уменьшить первый элемент в возвращаемом массиве является нулевым - PullRequest
0 голосов
/ 24 июня 2018

Привет. Я использую следующую функцию для группировки по ключу и вычисления итогов:

calcEquipmentTotals(){
    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' || item.action === 'stocktake'){
        total = total + item.quantity;
      }else{
        total = total - item.quantity;
      };
      obj[item.equipment_type_id].total = total;
      return obj;
    },[]);
    return groups;
  }

Это прекрасно работает, за исключением того, что первый элемент - пустой объект, что я тут не так делаю?

[ null, { "equipment_type_id": 1, "total": 1 }, { "equipment_type_id": "2", "total": 10 } ]

Ответы [ 2 ]

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

Комментарии указали мне правильное направление, вот что в итоге получилось:

calcEquipmentTotals(){
    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' || item.action === 'stocktake'){
        total = total + item.quantity;
      }else{
        total = total - item.quantity;
      };
      obj[item.equipment_type_id].total = total;
      return obj;
    },{});
    return Object.keys(groups).map((key) => groups[key]);
  }
0 голосов
/ 25 июня 2018

Это будет делать то, что вы хотите.

 calcEquipmentTotals() {
  var groups = this.inspection.equipments.reduce(function (map, item) {

    const obj = map.get(item.equipment_type_id) || {
      equipment_type_id: item.equipment_type_id, total: 0
    };

    if (item.action === 'added' || item.action === 'stocktake') {
      obj.total += item.quantity;
    } else {
      obj.total -= item.quantity;
    };
    map.set(obj);

    return map;
  }, new Map());
  return Array.from(groups.values());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...