数组属于引用数据类型,其值存储在堆中,因此我们无法简单的用[]==[]对其进行判断,但可以使用类似于深拷贝的方法将其像剥洋葱一样拨开,逐个判断
下面是本人自己写的一套算法:
function arrayEqual(arr1, arr2){ if(arr1.length==0&&arr2.length==0){return true} function ifEqual(obj1, obj2){ if(getType(obj1)!= getType(obj2)){ return false } var preType= getType(obj1) if(preType== ‘array‘){ if(obj1.length!= obj2.length){ return false } var l= obj1.length for(var i= 0; i< l; i ++){ if(ifEqual(obj1[i], obj2[i])==false){ return false } } } else if(preType== ‘object‘){ if(getObjLen(obj1)!= getObjLen(obj2)){ return false } for(var i in obj1){ if(ifEqual(obj1[i], obj2[i])==false){ return false } } }else { if(obj1!= obj2){ return false } } } function getType(obj){ return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase() } function getObjLen(obj){ var l= 0 for(var i in obj){ ++l } return l } return ifEqual(arr1, arr2)==false?false:true } var a=arrayEqual([1,{a:1}, [1,2,3,{a:1}]],[1,{a:1}, [1,2,3,{a:1}]]) console.log(a)
时间: 2024-11-05 06:25:57