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

如何编写JavaScript函数检测数组(含嵌套数组)是否存在重复元素

检测数组(含嵌套)中是否存在重复元素的JavaScript函数

要实现这个需求,核心是解决嵌套数组的深度比较问题——普通的===无法判断两个嵌套数组是否完全相同。我们可以先实现一个深度比较函数,再基于它完成重复检测。

实现思路

  1. 深度比较函数:递归处理基本类型和嵌套数组,确保结构与元素完全一致才判定为相等。
  2. 重复检测逻辑:遍历数组,对每个元素与后续所有元素做深度比较,发现重复立即返回true,遍历结束无重复则返回false。

完整代码

// 深度比较两个值是否完全相等
function deepEqual(val1, val2) {
    // 基本类型直接用===判断
    if (val1 === val2) return true;

    // 处理嵌套数组的情况
    if (Array.isArray(val1) && Array.isArray(val2)) {
        if (val1.length !== val2.length) return false;
        // 递归比较数组的每一个元素
        for (let i = 0; i < val1.length; i++) {
            if (!deepEqual(val1[i], val2[i])) return false;
        }
        return true;
    }

    // 非数组/基本类型的情况(需求未涉及,直接返回不等)
    return false;
}

// 检测数组是否存在重复元素(支持嵌套)
function hasDuplicates(arr) {
    for (let i = 0; i < arr.length; i++) {
        for (let j = i + 1; j < arr.length; j++) {
            if (deepEqual(arr[i], arr[j])) {
                return true;
            }
        }
    }
    return false;
}

测试验证

// 一维数组场景
console.log(hasDuplicates(['a', 'b', 'c', 'd'])); // false
console.log(hasDuplicates(['a', 'b', 'a', 'd'])); // true

// 嵌套数组场景
const a = [[1,2],[4,5]];
console.log(hasDuplicates(a)); // false

const b = [[1,2],[1,2]];
console.log(hasDuplicates(b)); // true

const c = [[1,2],[3,4],[1,2]];
console.log(hasDuplicates(c)); // true

扩展说明

如果需要支持对象的深度比较,可以在deepEqual函数中添加对象处理逻辑:判断是否为对象、遍历键值对递归比较即可。

内容的提问来源于stack exchange,提问作者dumpsterfire997

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:45:27