Tengo un obj que tiene los siguientes valores/clave
var pay = [ { journal: 23, regdate: "31/08/2021", account: "2.1.01.0001.02181 Folha de Pagamento:Salarios a Pagar", debitvalue: "3003,58", creditvalue: "", itemdescrip: "Valor ref folha de pgto, mês 08/2021", name: "", branch: "", costcenter: "", message: "", }, { journal: 23, regdate: "31/08/2021", account: "2.1.01.0001.02181 Folha de Pagamento:Salarios a Pagar", debitvalue: "", creditvalue: "4003,58", itemdescrip: "Valor ref folha de pgto, mês 08/2021", name: "", branch: "", costcenter: "", message: "", }, ];Me gustaría restar todo el "valor de débito" del "valor de crédito" donde se cumple una condición, es decir, la clave de cuenta contiene 2.1.01.0001.02181
Probé map, filter, indexOf, contains y todo lo cual devuelve [].
El resultado esperado debería ser 3.000 Estoy comenzando con javascript y no sé mucho. Gracias.
Algo como esto funcionará.
let diff pay.forEach((obj) => { if (obj.account.includes('2.1.01.0001.02181')) { let credit = parseInt(obj['creditvalue'].replace(/,/g, '.')) || 0 let debit = parseInt(obj['debitvalue'].replace(/,/g, '.')) || 0 diff = credit - debit } }) console.log(diff)Lancé algunas expresiones regulares para lidiar con las comas en sus datos.
Puede hacerlo con funciones de matriz simples como .reduce
var pay = [ { journal: 23, regdate: "31/08/2021", account: "4.1.01.0001.04200 Despesas com folha de pagamento:Salarios", debitvalue: "4003.58", creditvalue: "", itemdescrip: "Valor ref folha de pgto, mês 08/2021", name: "", branch: "", costcenter: "", message: "", }, { journal: 23, regdate: "31/08/2021", account: "2.1.01.0001.02181 Folha de Pagamento:Salarios a Pagar", debitvalue: "", creditvalue: "4003.58", itemdescrip: "Valor ref folha de pgto, mês 08/2021", name: "", branch: "", costcenter: "", message: "", }, ]; const totalAmount = pay.reduce( (total, currentPay) => { if (currentPay.account.includes("2.1.01.0001.02181")) { total = total + +currentPay.creditvalue - currentPay.debitvalue; } return total; }, 0) console.log(totalAmount);Para lograr mis necesidades utilicé la colaboración de los muchachos para implementar el siguiente código
const totalAmount = pay.reduce( (total, currentPay) => { if (currentPay.account.includes('2.1.01.0001.02181')) { var d = parseFloat(currentPay.debitvalue.replace(/,/g, '.')) || 0; var c = parseFloat(currentPay.creditvalue.replace(/,/g, '.')) || 0; total += +c - d; } return total; }, 0)¡Gracias chicos!