You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:06:00