自定义数组去重函数问题:arrIncludesTest始终返回true
问题解决:自定义函数实现数组去重
原代码的核心问题
- arrIncludesTest函数逻辑完全错误
- 循环条件错误:
i <= result.length会访问数组越界的索引(数组有效索引范围是0到result.length-1) - 判断逻辑颠倒:该函数本应检测元素是否存在,原代码只要第一个元素不等于目标就返回
true,导致永远认为元素不存在,所有元素都会被重复添加
- 循环条件错误:
- unique函数的条件判断颠倒:应该是当元素不存在于结果数组时,才执行添加操作
修正后的代码
function unique(arr) { let result = []; for (let elem of arr) { // 当元素不在结果数组中时,才添加 if (!arrIncludesTest(result, elem)) { arrPush1(result, elem); } } return result; } function arrIncludesTest(result, elem) { // 遍历数组所有有效元素,修正循环边界 for (let i = 0; i < result.length; i++) { // 找到相等元素,说明已存在,返回true if (result[i] === elem) { return true; } } // 遍历完未找到匹配项,说明不存在,返回false return false; } function arrPush1(result, elem){ result[result.length] = elem; } console.log(unique([1,2,2,3,4,4,4,44])); // 输出: [1,2,3,4,44]
关键修正说明
- arrIncludesTest函数:
- 修正循环边界,避免数组越界访问
- 调整判断逻辑:遍历数组时,只要找到与目标元素相等的项,立即返回
true(表示元素已存在);遍历结束后未找到匹配项,返回false(表示元素不存在)
- unique函数:
- 将条件改为
!arrIncludesTest(result, elem),即仅当元素不存在于结果数组时,才调用自定义的arrPush1添加元素
- 将条件改为
内容的提问来源于stack exchange,提问作者user526218
相关产品推荐
相关产品推荐

