JavaScript 数组比较

示例

为了进行简单的数组比较,您可以使用JSON stringify并比较输出字符串:

JSON.stringify(array1) === JSON.stringify(array2)

注意:这仅在两个对象都可以JSON序列化并且不包含循环引用的情况下起作用。可能会抛出TypeError: Converting circular structure to JSON

您可以使用递归函数比较数组。

function compareArrays(array1, array2) { 
  var i, isA1, isA2;
  isA1 = Array.isArray(array1);
  isA2 = Array.isArray(array2);
  
  if (isA1 !== isA2) { // 一个是数组而另一个不是吗?
    return false;      // 是的,那么不能一样
  }
  if (! (isA1 && isA2)) {      // 既不是数组 
    return array1 === array2;  // 返回严格平等
  }
  if (array1.length !== array2.length) { // 如果长度不同则不能相同
    return false;
  }
  // 迭代数组并进行比较
  for (i = 0; i < array1.length; i += 1) {
    if (!compareArrays(array1[i], array2[i])) { // 项目是否递归比较
      return false;
    }           
  }
  return true; // 必须相等
}

警告:使用上述函数很危险,try catch如果您怀疑数组有循环引用(对包含自身的引用的数组的引用),则应将其包装在

a = [0] ;
a[1] = a;
b = [0, a]; 
compareArrays(a, b); // 引发RangeError:超出最大调用堆栈大小

注意:该函数使用严格相等运算符===比较非数组项目  {a: 0} === {a: 0}是否为false