如何在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
相关产品推荐
相关产品推荐

