Javascript 返回数组中的JS Reduce第一项为null

Javascript 返回数组中的JS Reduce第一项为null,javascript,angular,Javascript,Angular,您好,我正在使用以下功能按键分组并计算总数: 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}; // C

您好,我正在使用以下功能按键分组并计算总数:

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 } ]

这会满足你的要求

 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());
}

这些评论为我指明了正确的方向,这就是它最终成功的原因:

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]);
  }

可能没有任何项的
设备类型\u id
为0为什么初始值是数组而不是对象文字?@HikmatGurbanli,因为如果使用{}:错误:找不到类型为“object”的不同支持对象“[object object]”,我从Angular中得到此错误。NgFor只支持绑定到诸如Arrayswell之类的Iterables,然后在reduce的回调中将其视为一个数组。您不是在推送项目,而是在分配一些索引,一些索引将为空。使用对象进行分组,然后在完成分组后,使用
object.keys(obj).map((key)=>obj[key])将其转换为数组。