为了进行简单的数组比较,您可以使用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