javascript 如何比较两个二维数组?

6jjcrrmo  于 2022-12-02  发布在  Java
关注(0)|答案(4)|浏览(351)

我有一个问题,比较两个二维数组在javascript。它应该输出“真”,如果两个二维数组是相同的。
我试过的代码:
`

function check(){
   
    if (data.every() === solution.every()){
        alert("example");
    } else {
        console.log("Data Array: " + data);
        console.log("Solution Array: " + solution);
    }
  
}

`
我想我的解决方案只适用于两个一维阵列。我希望有人能帮助我,教我一些东西。
注意:我只使用jquery和nativ js。
先谢谢你。
卢卡(~ L)

ql3eal8s

ql3eal8s1#

我认为这样的方法是可行的:

function test(array1, array2)
{
 if(array1.length !== array2.length) return false;

for(let i=0;i<array1.length;i++)
{
 if(array1[i].length !== array2[i].length) return false;
 for(let j=0;j<array1[i].length;j++)
 {
  if(array1[i][j] !== array2[i][j]) return false;
 }
}
return true;
}

你也可以做一个递归的版本,这将工作的数组N维,但如果你只需要2,以上是罚款。

6jygbczu

6jygbczu2#

此代码适用于任意数量的维度:

const random2dArray = (n,m) => Array(n).fill(0)
  .map(_=>Array(m).fill(0).map(_=>10*Math.random()|0))

const arrEq = (a,b) => Array.isArray(a) ?
  a.length===b.length && a.every((e,i)=>arrEq(e,b[i])) : a===b

const a = random2dArray(3,3)
const b = random2dArray(3,3)
const c = random2dArray(3,5)
const d = random2dArray(6,7)
const e = structuredClone(a)

console.log(arrEq(a,b))
console.log(arrEq(a,c))
console.log(arrEq(a,d))
console.log(arrEq(a,e))
dxpyg8gm

dxpyg8gm3#

您只需按照以下步骤即可达到此要求**:**

  • flatten将两个2D数组转换为1D数组。
  • 检查两个数组的长度沿着使用Array.every()方法检查每个项目。

现场演示**:**

const data = [[1,2,3], [4,5]];
const solution = [[1,2,3], [4,5]];

const res = (data.flat().length === solution.flat().length) && data.flat().every((item, index) => item === solution.flat()[index]);

console.log(res ? 'Both arrays are equal' : 'not equal');
vh0rcniy

vh0rcniy4#

许多人建议的一个常见解决方案是使用JSON.stringify()。这允许我们序列化每个数组,然后比较两个序列化的字符串。一个简单的实现可能如下所示:

function check(){
   
    if ( JSON.stringify(data) === JSON.stringify(solution) ){
        alert("example");
    } else {
        console.log("Data Array: " + data);
        console.log("Solution Array: " + solution);
    }
}

相关问题