Node.js中如何完整输出JSON数组所有buyer_sku_code?
问题分析
你的代码仅打印第一个buyer_sku_code就终止,核心原因是循环内部的else分支使用了return语句。return会直接跳出整个readFile的回调函数,导致循环只执行一次就停止,后续数组元素完全没机会被处理:
- 如果第一个元素的
buyer_sku_code不等于kod,会直接执行return conn.reply(...),函数直接结束; - 就算第一个元素匹配,后续元素不匹配时,依然会触发
return中断循环。
修复方案
需要把「打印所有sku」和「查找匹配kod并回复」的逻辑拆分,不在循环内用return提前终止函数。以下是两种可行的修改方式:
方案一:用forEach遍历打印,用some判断匹配
fs.readFile('./custom-raeonn/digiflazz/prepaidData.json', 'utf8', function (err, data) { // 新增文件读取错误处理 if (err) { return conn.reply(m.chat, '读取数据文件失败', m); } try { data = JSON.parse(data); } catch (parseErr) { // 新增JSON解析错误处理 return conn.reply(m.chat, '数据文件格式错误', m); } // 遍历打印所有buyer_sku_code data.forEach(item => { console.log(item.buyer_sku_code); }); // 检查是否存在匹配的kod const isMatched = data.some(item => item.buyer_sku_code === kod); if (isMatched) { conn.reply(m.chat, `Passed`, m); } else { conn.reply(m.chat, `Sorry. Could not find any product code of ${kod}, Perhaps a typo?`, m); } });
方案二:用for循环遍历,标记是否找到
fs.readFile('./custom-raeonn/digiflazz/prepaidData.json', 'utf8', function (err, data) { if (err) return conn.reply(m.chat, '读取数据文件失败', m); try { data = JSON.parse(data); } catch (e) { return conn.reply(m.chat, '数据文件格式错误', m); } let isFound = false; for (let i = 0; i < data.length; i++) { console.log(data[i].buyer_sku_code); // 找到匹配项时标记,不中断循环 if (data[i].buyer_sku_code === kod) { isFound = true; } } // 循环结束后统一回复 if (isFound) { conn.reply(m.chat, `Passed`, m); } else { conn.reply(m.chat, `Sorry. Could not find any product code of ${kod}, Perhaps a typo?`, m); } });
关键修改点
- 移除循环内的
return,确保所有数组元素都能被遍历打印; - 拆分「打印逻辑」和「匹配判断逻辑」,循环结束后再统一执行回复操作;
- 新增文件读取、JSON解析的错误处理,提升代码健壮性。
内容的提问来源于stack exchange,提问作者Lyraeon
相关产品推荐
相关产品推荐

