如何在JavaScript中对符合条件的数组对象的两个键值做减法汇总
解决方案
你之前筛选返回空数组大概率是两个常见基础问题:1. JS 中判断字符串包含的原生方法是String.prototype.includes(),没有contains()这个原生方法;2. 没有处理字符串格式数值、空值的转换逻辑。完整实现如下:
- 第一步:用
filter()筛选所有account字段包含2.1.01.0001.02181的条目 - 第二步:遍历筛选后的数组,分别累加
creditvalue和debitvalue的数值,注意要把葡语格式的逗号小数点替换为英文点后转数字,空值视为0 - 第三步:用credit总和减去debit总和得到最终结果
// 原始数组 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: "", }, ]; // 筛选符合条件的条目 const targetAccount = "2.1.01.0001.02181"; const filteredItems = pay.filter(item => item.account.includes(targetAccount)); // 计算累计值 let totalCredit = 0; let totalDebit = 0; filteredItems.forEach(item => { // 处理贷方金额 if (item.creditvalue) { const creditNum = parseFloat(item.creditvalue.replace(',', '.')); totalCredit += creditNum; } // 处理借方金额 if (item.debitvalue) { const debitNum = parseFloat(item.debitvalue.replace(',', '.')); totalDebit += debitNum; } }); // 得到最终结果 const finalResult = totalCredit - totalDebit; console.log(finalResult); // 示例数据输出为1000,你真实业务数据总和符合约3000的预期
关键注意点
- 如果用
indexOf()判断包含,需要写item.account.indexOf(targetAccount) !== -1,返回值为-1代表未匹配到内容 - 空字符串直接转数字会得到
NaN,必须做空值判断默认赋值为0 - 欧洲/葡语系数值用逗号做小数点,必须替换为英文句号才能被
parseFloat()正确解析
内容的提问来源于stack exchange,提问作者augustus182l
相关产品推荐
相关产品推荐

