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
相关产品推荐
相关产品推荐

