如何为JavaScript关联数组添加ID维度的金额校验逻辑?
实现思路与代码示例
当然有啦,我给你整理一套实用的实现思路,分两步就能轻松搞定这个验证逻辑:
第一步:分组并计算同一id的total总和
我们可以用Array.reduce()方法把数组中相同id的条目归为一组,同时计算每组的total总和,顺便记录该id对应的remaining_amount(这里默认同一个id的remaining_amount是一致的,如果有不一致的情况,我后面会补充处理方案)。代码示例:
const array = [ { id: 1, remaining_amount: 30, total: 20 }, { id: 1, remaining_amount: 30, total: 20 }, { id: 2, remaining_amount: 50, total: 40 } ]; // 分组并计算total总和 const groupedData = array.reduce((acc, item) => { // 如果当前id还没被分组,初始化分组信息 if (!acc[item.id]) { acc[item.id] = { remainingAmount: item.remaining_amount, totalSum: 0 }; } // 累加当前条目的total到对应分组的总和里 acc[item.id].totalSum += item.total; return acc; }, {});第二步:遍历分组结果进行验证提示
拿到分组后的数据,我们只需要逐个检查每个id的total总和是否超过对应的剩余额度,一旦超过就触发提示(你可以根据需求换成控制台输出、页面弹窗或者自定义提示组件)。代码示例:
// 遍历分组数据做验证 for (const id in groupedData) { const { remainingAmount, totalSum } = groupedData[id]; if (totalSum > remainingAmount) { // 控制台提示 console.log(`⚠️ 提示:id为${id}的条目total总和(${totalSum})已超过剩余额度(${remainingAmount})`); // 如果需要页面弹窗提示,替换成下面这行 // alert(`提示:id为${id}的条目total总和(${totalSum})已超过剩余额度(${remainingAmount})`); } }
额外处理:同一id的remaining_amount不一致的情况
如果你的数组里可能出现同一个id对应不同remaining_amount的情况,建议在分组的时候先做异常提示,避免后续验证逻辑出错:
const groupedData = array.reduce((acc, item) => { if (!acc[item.id]) { acc[item.id] = { remainingAmount: item.remaining_amount, totalSum: 0 }; } else if (acc[item.id].remainingAmount !== item.remaining_amount) { // 警告同一个id的剩余额度不一致 console.warn(`⚠️ 警告:id为${item.id}的条目剩余额度存在差异,已记录值为${acc[item.id].remainingAmount},当前值为${item.remaining_amount}`); } acc[item.id].totalSum += item.total; return acc; }, {});
内容的提问来源于stack exchange,提问作者arun kamboj
相关产品推荐
相关产品推荐

