我遵循了一个使用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方法中求和一个数组的值?
编辑
例如,如果新值与数组中存在的值相同,则使用reduce将值分组。所以我想对this.auxTablaPrincipal
数组的值求和以应用conceptoImpuesto的总和。
在图像中,“ canatidad”的值为2。因此,就像我在代码中所做的一样,数组conceptoImpuesto
的“ base”和“ importe”值相加
答案 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)