数组比较
对于简单的数组比较,你可以使用 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