JavaScript图书库存更新问题:如何正确新增ISBN并处理数量变更?
修复图书馆库存更新逻辑问题
原代码存在以下核心问题,导致重复添加图书或操作异常:
- 归还图书时,遍历
catalogus每一项,只要当前项ISBN不匹配就新增图书,同一ISBN会被重复添加多次 - 删除库存为0的图书时,错误删除数组第一项,而非对应ISBN的目标图书
- 嵌套循环逻辑混乱,操作判断与对象查找顺序错误,引发库存更新异常
修复后的代码
// 遍历每日图书操作记录 for (const actie of dagverloop) { // 定位当前操作对应的图书 const targetBoek = catalogus.find(item => item.ISBN === actie.ISBN); if (actie.handeling === "uitlening") { if (targetBoek) { targetBoek.aantal--; // 库存归零后移除该图书 if (targetBoek.aantal === 0) { const boekIndex = catalogus.indexOf(targetBoek); catalogus.splice(boekIndex, 1); } } } else if (actie.handeling === "teruggave") { if (targetBoek) { targetBoek.aantal++; } else { // 图书不存在时新增,初始数量设为1 catalogus.push({ ISBN: actie.ISBN, aantal: 1 }); } } } console.log(catalogus);
关键修复说明
- 精准定位图书:使用
find方法直接匹配ISBN,替代嵌套循环,避免逻辑混乱 - 借出操作处理:找到目标图书后先减少库存,库存归零通过正确索引删除对应条目,不再误删其他图书
- 归还操作处理:先检查图书是否存在,存在则增加库存,不存在才新增条目,彻底解决重复添加问题
- 简洁遍历:用
for...of遍历操作记录,代码可读性更高
执行后catalogus将得到期望结果:5本图书,其中4本数量为1,1本(ISBN 978-0596008642)数量为3。
内容的提问来源于stack exchange,提问作者Rubihno
相关产品推荐
相关产品推荐

