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

JavaScript 中判断两个数组是否相等,第1张

1、不能直接使用 ==
let array1 = [];
let array2 = [];
console.log(array1 == array2); //输出false

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

2、数组简单比较

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

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

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

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

scalarArrayEquals(array1,array2) {
  return array1.length==array2.length && array1.every(function(v,i) { return v === array2[i]});
}
3、嵌套数组比较

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

arrayEquals(array1, array2) {
    if(!(array1 || array1)) {
      return false;
    }
    // 先比较长度 
    if (array1.length != array2.length)
        return false;

    for (let i = 0, l=array1.length; i < l; i++) {
        // 检查是否为内嵌数组
        if (array1[i] instanceof Array && array2[i] instanceof Array) {
            // 递归比较数组
            if (!arrayEquals(array1[i],array2[i]))
                return false;       
        } else if (this[i] != array[i]) { //标量比较 
            return false;   
        }           
    }       
    return true;
}
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转换为字符串的性能最差。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1321293.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-12
下一篇 2022-06-12

发表评论

登录后才能评论

评论列表(0条)

保存