JavaScript openOrSenior函数无法返回预期分类数组问题修复
问题说明
原openOrSenior函数预期返回成员分类结果数组,分类规则为:成员年龄≥55且handicap值大于7时归类为"Senior",其余成员归类为"Open"。但实际运行时仅逐行打印Open/Senior文本,无法返回符合格式要求的数组,预期效果参考如下:
input = [[18, 20], [45, 2], [61, 12], [37, 6], [21, 21], [78, 9]] output = ["Open", "Open", "Senior", "Open", "Open", "Senior"]
原代码逻辑错误排查
原问题代码如下:
function openOrSenior(data) { let newArr = [] let userData = [data] return userData.forEach(data => { data.map(data => { let answer = (data[0] >= 55 && data[1] > 7) ? console.log("Senior") : console.log("Open"); return answer }) }) }
存在的核心问题:
- 多余嵌套:将入参
data额外包裹一层数组赋值给userData,属于无意义操作,平白增加遍历层级 - 方法误用:
forEach本身无返回值(固定返回undefined),不能作为函数的返回结果;内层map执行生成的数组没有被变量接收,直接被丢弃 - 赋值逻辑错误:三元表达式中执行的是
console.log()打印操作,该方法返回值为undefined,就算被map收集也只能得到全是undefined的数组,拿不到需要的分类字符串 - 冗余代码:开头声明的
newArr变量全程没有被使用,属于无效代码
可直接运行的正确实现
直接遍历入参数组,对每个成员按规则判断后返回对应分类字符串,用map直接生成结果数组返回即可:
function openOrSenior(data) { return data.map(item => { const [age, handicap] = item return age >= 55 && handicap > 7 ? "Senior" : "Open" }) }
测试验证:传入示例输入时,返回结果与预期输出完全一致,无多余打印操作。
内容的提问来源于stack exchange,提问作者Emma Maina
相关产品推荐
相关产品推荐

