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

JavaScript按客户ID分组存储发票对象,避免数据覆盖

解决方案

你的思路完全正确,核心就是先判断客户ID对应的键是否存在,不存在就先创建空对象,再把发票数据添加进去,而非直接覆盖原有内容。修改后的代码如下:

var clients = {};
$('.invoice').each(function() {
    var invoiceid = $(this).find('.invoiceid').text().trim(); // 去除空白字符避免键名异常
    var clientid = $(this).find('.client').text().trim();
    var provider = $(this).find('.provider').text().trim();
    var amount = $(this).find('.amount').text().trim();
    
    // 检查客户是否已存在,不存在则初始化空对象
    if (!clients[clientid]) {
        clients[clientid] = {};
    }
    
    // 将当前发票以发票ID为键,存入对应客户的对象中
    clients[clientid][invoiceid] = {
        provider: provider,
        amount: amount
    };
});

关键修改说明:

  • 给所有文本获取操作加上trim(),避免HTML中的空格、换行符等意外字符导致键名错误。
  • 不再直接给clients[clientid]赋值新对象,而是先判断:如果客户ID在clients中不存在,就先创建一个空对象作为它的值。
  • 把发票数据以invoiceid为键,存入对应客户的对象下,确保同一客户的多张发票不会互相覆盖,而是独立存储。

运行这段代码后,就能生成你需要的层级结构:每个客户ID对应一个对象,内部以发票ID为键存储该发票的provider和amount信息。

内容的提问来源于stack exchange,提问作者Kev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:33:13