JavaScript实现isSorted函数时如何使用for-of循环并解决代码报错问题
问题分析与修复方案
原代码存在的问题
- 引用了未定义的
number1、number2变量,运行时会直接抛出引用错误 return true写在for-of循环体内,第一次循环就会直接返回结果,不会遍历后续元素,逻辑完全中断- 思路偏差:判断数组是否升序不需要额外声明数组存储元素,只要逐一比较相邻元素的大小关系即可,只要存在一对相邻元素不符合「后一个 >= 前一个」的规则,数组就不是升序排列的
修复后代码(符合for-of循环使用要求)
/** * @param {Array<number>} array - an array of numbers * @returns {boolean} whether or not the given array is sorted */ function isSorted(array) { // 边界处理:空数组、单元素数组默认已排序 if (array.length <= 1) { return true; } // 存储上一个元素,初始为第一个元素 let prev = array[0]; // 用entries()获取索引+值的迭代器,配合for-of循环使用 for (const [index, current] of array.entries()) { // 第一个元素不需要比较,直接跳过 if (index === 0) continue; // 只要存在当前元素小于前一个元素,直接返回未排序 if (current < prev) { return false; } // 更新前一个元素为当前元素,用于下一轮比较 prev = current; } // 所有元素遍历完成,符合升序要求 return true; }
测试验证
你提供的两个测试用例运行后均会输出Test PASSED.:
- 输入
[1,2,3]时,相邻元素依次比对均符合升序,返回true - 输入
[3,2,3]时,第二个元素2小于前一个元素3,直接返回false
内容的提问来源于stack exchange,提问作者jessieWJ
相关产品推荐
相关产品推荐

