嵌套数组中特定用户ID出现次数统计异常:代码输出1而非预期值5的问题排查
问题分析与修复:统计API返回数据中特定用户出现次数错误
我一眼就看出问题出在哪了,你的代码在遍历对象和数据访问路径上都犯了小错误,导致统计结果不符合预期。
错误点拆解
- 遍历对象错误:axios请求返回的
discordlistspace是一个完整的响应对象,包含状态码、请求头等额外信息,真实的投票数据藏在discordlistspace.data里(也就是API返回的JSON主体)。你直接对discordlistspace调用forEach,根本不会遍历到你需要的投票数组。 - 数据访问路径错误:就算遍历对象对了,代码里写的
item.data[0].user.id也是错的——每个循环的item本身就是data数组里的单个投票项,直接访问item.user.id就能拿到用户ID,没必要多此一举去取data[0]。
修复后的完整代码
var dlsapi = { url: 'https://api.discordlist.space/v2/bots/814580247973986314/upvotes', headers: {'content-type': 'application/json', authorization: process.env.DLS} }; const discordlistspace = await axios.request(dlsapi); try { let dlscount = 0; // 先拿到真正的投票数据数组 const upvoteList = discordlistspace.data.data; upvoteList.forEach(item => { // 直接访问当前项的user.id if (item.user.id === "221838936866029568") { dlscount++; } }); console.log(dlscount); // 现在会输出预期的5啦 } catch (error) { console.error(error); }
更简洁的写法(可选)
如果你偏爱简洁的代码风格,可以用数组的filter方法一步完成统计:
const upvoteList = discordlistspace.data.data; const dlscount = upvoteList.filter(item => item.user.id === "221838936866029568").length; console.log(dlscount);
这样修改后,就能正确统计到该用户的5次投票记录了。
内容的提问来源于stack exchange,提问作者Matsyui
相关产品推荐
相关产品推荐

