res.send返回结果错误但console.log打印同一份数据正常如何解决?
问题原因
- 变量覆盖问题:你使用
var声明的team1、team2属于函数作用域变量,循环过程中每次赋值都会覆盖上一次的结果。console.log是在每次循环内实时打印,所以会依次输出所有符合条件的队伍名,但循环结束后这两个变量仅保留最后一次循环的赋值,也就是你看到的France。 - 第一个循环逻辑冗余:你遍历
alldata的循环内永远只取索引为0和1的元素拼接,循环执行多少次结果都不变,属于无效代码,还会重复覆盖result变量。
解决方法
如果需要返回所有符合条件的队伍名称,你需要先声明一个数组存储所有匹配的结果,循环过程中把每个符合条件的队伍名追加到数组里,最后再通过res.send返回整个数组即可。
修正后的代码如下:
// 冗余循环直接简化,不需要遍历alldata const alldata = wc2014.rounds.concat(wc2018.rounds); const result = alldata[0].matches.concat(alldata[1].matches); // 定义数组存储所有获胜队伍名称 const winTeams = []; for (var key in result) { if(result[key].goals1.length > result[key].goals2.length){ const team = result[key].team1.name; console.log(team); winTeams.push(team) } else { const team = result[key].team2.name; console.log(team); winTeams.push(team) } } res.send(winTeams);
运行后res.send会返回["Germany", "France"],和控制台输出内容一致。
内容的提问来源于stack exchange,提问作者Feyza Keles
相关产品推荐
相关产品推荐

