if语句与三元运算符代码对比:自定义compareTriplets函数无法运行原因排查
compareTriplets函数代码错误分析与差异对比
两段代码对比
你的代码:
function compareTriplets(a, b) { // Write your code here let score = [0,0]; for (let i = 0; i < a.length; i++) { if (a[i] > b[i]) { return score[0]++; } else if (a[i] < b[i]) { return score[1]++; } else return "" } return score; }
可用代码:
function compareTriplets(a, b) { let score = [0,0] for (let i = 0; i < a.length; i++) a[i] > b[i] ? score[0]++ : a[i] < b[i] ? score[1]++ : "" return score }
你的代码错误点
- 提前终止循环与函数:循环内部的
return语句是致命问题。每次进入循环的第一次判断,不管是a[i]>b[i]、a[i]<b[i]还是元素相等,都会执行return直接终止函数,根本不会完成整个三元组的遍历。 - 返回内容完全错误:就算忽略提前终止的问题,
return score[0]++是先返回当前分数值再自增,不符合累加分数的逻辑;而else return ""更是直接返回空字符串,完全偏离题目要求的返回分数数组的需求。
两段代码的核心差异
- 循环内执行逻辑:
- 你的代码用
if-else但错误加入return,导致循环仅执行一次就结束函数。 - 可用代码用三元运算符做条件分支的自增操作,没有任何
return,循环会完整遍历整个数组,把所有元素的比较结果累加到分数数组中。
- 你的代码用
- 函数返回时机:
- 你的代码在循环内部提前返回,永远到不了最后一行的
return score。 - 可用代码是在循环完全执行完毕后,才返回最终的分数数组,符合题目要求。
- 你的代码在循环内部提前返回,永远到不了最后一行的
- 相等元素的处理:
- 你的代码在元素相等时直接
return ""终止函数;可用代码在元素相等时仅执行空操作,不改变分数,继续下一次循环。
- 你的代码在元素相等时直接
内容的提问来源于stack exchange,提问作者Shaneeyb
相关产品推荐
相关产品推荐

