陣列比較

對於簡單的陣列比較,你可以使用 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) { // is one an array and the other not?
    return false;      // yes then can not be the same
  }
  if (! (isA1 && isA2)) {      // Are both not arrays 
    return array1 === array2;  // return strict equality
  }
  if (array1.length !== array2.length) { // if lengths differ then can not be the same
    return false;
  }
  // iterate arrays and compare them
  for (i = 0; i < array1.length; i += 1) {
    if (!compareArrays(array1[i], array2[i])) { // Do items compare recursively
      return false;
    }           
  }
  return true; // must be equal
}

警告: 如果你懷疑陣列有可能存在迴圈引用(對包含對其自身的引用的陣列的引用),則使用上述函式是危險的並且應該包含在 try catch 中。

a = [0] ;
a[1] = a;
b = [0, a]; 
compareArrays(a, b); // throws RangeError: Maximum call stack size exceeded

注意: 該函式使用嚴格相等運算子 === 來比較非陣列項 {a: 0} === {a: 0}false