使用for循环与if条件判断数组数据类型的代码异常问题咨询
代码无法正常运行的原因
这段代码存在3个核心逻辑错误,无法实现检查数组元素类型是否一致的需求:
- 第一个for循环存在边界溢出问题
循环条件为i < array.length,当i走到数组最后一个下标(即array.length - 1)时,i+1超出数组范围,array[i+1]的值为undefined,会额外多一次无意义的和undefined的类型比较。 - 第二个for循环未完成全量遍历就提前返回
不管判断结果如何,你在循环的第一次迭代就直接执行return退出函数,根本不会检查helper数组的后续元素,逻辑直接中断。 - helper数组的判断逻辑完全错误
你设计helper数组的初衷应该是记录每一对相邻元素的类型是否一致,只要helper数组里出现任意一个"not",就说明存在类型不同的元素。但你当前的判断逻辑是比较helper数组的相邻元素是否相等,和需求完全不匹配。比如你输入[1, "a", 2],按你的代码逻辑,helper数组是["not", "not", "not"],第二个循环第一次判断helper[0] === helper[1]成立,会错误返回same,但实际三个元素类型明显不一样。
修正后的实现代码
function sameDataType(array) { // 空数组/单元素数组可按需求自定义返回值,这里默认判定为类型一致 if (array.length <= 1) return "same"; // 取第一个元素的类型作为基准 const baseType = typeof array[0]; for (let i = 1; i < array.length; i++) { // 只要有一个元素类型和基准不一致,直接返回不同 if (typeof array[i] !== baseType) { return "different"; } } // 遍历完所有元素都符合要求 return "same"; } console.log(sameDataType([1, 1, "string"])) // 输出different console.log(sameDataType([1, 2, 3])) // 输出same
内容的提问来源于stack exchange,提问作者sugar42
相关产品推荐
相关产品推荐

