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

如何在JavaScript中正确比较两个二维数组?

解决JavaScript二维数组完全相等的比较问题

你原代码的问题有两个:

  • every()方法必须传入回调函数才会生效,你现在直接调用data.every()和solution.every(),实际是在比较两个方法的默认返回值(未传回调时every()会直接返回true),根本没对数组内容做比较。
  • 一维数组的比较逻辑没法直接套用到二维数组上,因为二维数组的每个元素本身也是数组,需要逐层深入比对。

下面是可直接使用的实现方案,支持任意嵌套层级的数组(不止二维):

// 封装通用的数组比较函数
function arraysAreEqual(arr1, arr2) {
    // 先判断两者是否都是数组
    if (Array.isArray(arr1) && Array.isArray(arr2)) {
        // 长度不同直接判定不相等
        if (arr1.length !== arr2.length) return false;
        // 遍历每个元素,递归进行比较
        return arr1.every((item, index) => arraysAreEqual(item, arr2[index]));
    } else {
        // 非数组元素直接用全等符比较值
        return arr1 === arr2;
    }
}

// 修改你的check函数
function check(){
    if (arraysAreEqual(data, solution)){
        alert("true");
    } else {
        console.log("Data Array: ", data);
        console.log("Solution Array: ", solution);
    }
}

逻辑说明:

  • 先校验两个输入是否为数组,若是则优先比较长度,长度不一致直接返回false。
  • 用every()遍历第一个数组的每个元素,同时和第二个数组对应索引的元素递归调用比较函数,确保嵌套的子数组也能被逐层比对。
  • 遇到非数组元素(如数字、字符串)时,直接用===做全等比较,保证值和类型都一致。

测试示例:

const data = [[1,2],[3,4]];
const solution = [[1,2],[3,4]];
arraysAreEqual(data, solution); // 返回true

const data2 = [[1,2],[3,5]];
arraysAreEqual(data2, solution); // 返回false

const data3 = [[1,2]];
arraysAreEqual(data3, solution); // 返回false

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:05:22