0


JavaScript 中判断两个数组是否相等

1、不能直接使用

==
let array1 =[];let array2 =[];
console.log(array1 == array2);//输出false

对于对象来说,

==

比较的是两个对象是否为同一个对象。数组属于对象类型,尽管数组元素是相同的,但这两个数组属于不同的对象,所以

==

比较为false。

2、数组简单比较

如果数组里的元素是标量,非object类型,可以使用

==

比较数组里的元素:

every() 方法使用指定函数检测数组中的所有元素:

  1. 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
  2. 如果所有元素都满足条件,则返回 true。

注意: every() 不会对空数组进行检测。every() 不会改变原始数组。

scalarArrayEquals(array1,array2){return array1.length==array2.length && array1.every(function(v,i){return v === array2[i]});}

3、嵌套数组比较

如果数组是多层嵌套,数组的基本元素也为标量。

constarrayEquals=(array1, array2)=>{// 先检查是否存在if(!(array1 || array1)){returnfalse;}// 先比较长度 if(array1.length != array2.length){returnfalse;}for(let i =0, l=array1.length; i < l; i++){// 检查是否为内嵌数组if(array1[i]instanceofArray&& array2[i]instanceofArray){// 递归比较数组if(!arrayEquals(array1[i],array2[i]))returnfalse;}elseif(array1[i]!= array2[i]){//标量比较 returnfalse;}}returntrue;}

4、Lodash或Underscore比较数组(推荐)

如果数组的元素可能为object,可以考虑使用Lodash或者Underscore。它们已经实现了对象的深度比较,包括数组。

使用Lodash或Underscore比较数组或对象很简单:

_.isEqual(array1, array2)//相等返回true,否则返回false
_.isEqual(object1, object2)

5、转为字符串比较数组

除了上面的比较方法外,还可以把数组转换为字符串后,比较字符串。

array1.toString()=== array2.toString();// 或者JSON.stringify(array1)===JSON.stringify(array2);

相对上面几种方式,转换为字符串后再比较的性能是比较差的。其中以JSON转换为字符串的性能最差。


本文转载自: https://blog.csdn.net/qq_44721831/article/details/124887522
版权归原作者 gxhlh 所有, 如有侵权,请联系我们删除。

“JavaScript 中判断两个数组是否相等”的评论:

还没有评论