You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义数组去重函数问题:arrIncludesTest始终返回true

问题解决:自定义函数实现数组去重

原代码的核心问题

  1. arrIncludesTest函数逻辑完全错误
    • 循环条件错误:i <= result.length 会访问数组越界的索引(数组有效索引范围是0到result.length-1)
    • 判断逻辑颠倒:该函数本应检测元素是否存在,原代码只要第一个元素不等于目标就返回true,导致永远认为元素不存在,所有元素都会被重复添加
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 01:15:56