如何在JavaScript的reduce中对数组求和?

时间:2019-01-07 17:24:58

标签: javascript arrays vue.js

我遵循了一个使用reduce求和一些键的值的示例,但是现在,我想对reduce内的对象数组的值求和...

这就是我所拥有的:

groupConceptos(){
        var result = [];                        
        this.auxTablaPrincipal.reduce((res, value, index) => {     
            var aux = [];               
            value.conceptoImpuesto.reduce((ant, nuevo) => {
                if(!ant[nuevo.nombre]){
                    ant[nuevo.nombre] = {
                        base: 0,
                        importe: 0,
                        impuesto: nuevo.impuesto,
                        local: nuevo.local,
                        nombre: nuevo.nombre,
                        tasaOcuota: nuevo.tasaOcuota,
                        tipoFactor: nuevo.tipoFactor,
                        tipoImpuesto: nuevo.tipoImpuesto
                    };
                    aux.push(ant[nuevo.nombre])
                }
                ant[nuevo.nombre].base += parseFloat(nuevo.base);
                ant[nuevo.nombre].importe += parseFloat(nuevo.importe);
                return ant
            }, {});

            if(!res[value.descripcion]){                   
                res[value.descripcion] = {                        
                    conceptoImpuesto: aux,//value.conceptoImpuesto,                        
                    cantidad: 0,
                    claveInterna: value.claveInterna,
                    claveProdServ: value.claveProdServ,
                    claveUnidad: value.claveUnidad,
                    descripcion: value.descripcion,
                    descuento: 0,                        
                    importe: 0,
                    subtotal: 0,
                    porcentajeIva: value.porcentajeIva,
                    precioPublico: value.precioPublico,
                    productoId: value.productoId,
                    sumaImporte: 0, 
                    totalIva: value.totalIva,
                    totalPagado: value.totalPagado,
                    unidad: value.unidad,
                    valorUnitario: value.valorUnitario                                          
                };
                result.push(res[value.descripcion])
            }             
            res[value.descripcion].cantidad += parseInt(value.cantidad);
            res[value.descripcion].descuento += parseInt(value.descuento);
            res[value.descripcion].importe += parseFloat(value.importe); 
            res[value.descripcion].subtotal += parseFloat(value.subtotal);                         
            res[value.descripcion].sumaImporte += parseInt(value.sumaImporte);                                                                                   
            return res
        }, {});

        this.tablaPrincipal = result;  
            this.tablaPrincipal.forEach(element => {
                element.conceptoImpuesto.forEach(concepto => {
                    this.auxConceptosImpuestos.push({
                        base: concepto.base,
                        importe: concepto.importe,
                        impuesto: concepto.impuesto,
                        local: concepto.local,
                        nombre: concepto.nombre,
                        tasaOcuota: concepto.tasaOcuota,
                        tipoFactor: concepto.tipoFactor,
                        tipoImpuesto: concepto.tipoImpuesto
                    })
                });
            });                                       
    },

* this.auxTablaPrincipal是用于减少并分配给this.tablePrincipal的数组

this.tablaPrincipal是this.auxTablaPrincipal减少的结果。 conceptoImpuesto是一个对象数组,我需要对一些值求和,例如:res[value.descripcion].cantidad += parseInt(value.cantidad);

因此,我使用相同的方法将value.conceptoImpuesto的约简的this.auxTablaPrincipal进行归约,然后将aux数组分配给conceptoImpuesto的{​​{1}}

但是这种方法不起作用。

如何在reduce方法中求和一个数组的值?

编辑

enter image description here

例如,如果新值与数组中存在的值相同,则使用reduce将值分组。所以我想对this.auxTablaPrincipal数组的值求和以应用conceptoImpuesto的总和。

在图像中,“ canatidad”的值为2。因此,就像我在代码中所做的一样,数组conceptoImpuesto的“ base”和“ importe”值相加

1 个答案:

答案 0 :(得分:0)

因此,您要做的是将reduce初始化为0,然后从每个数组项中将其添加。例如,如果您有一个像这样的数组:

const employees = [
  { name: 'Bob', yearsExperience: 5 },
  { name: 'Juanita', yearsExperience: 10 },
  { name: 'Shen', yearsExperience: 12 }
]

您想要累积团队的经验,可以这样做:

employees.reduce((accumulator, value) => {
  accumulator += value.yearsExperience
  return accumulator
}, 0)