在JavaScript中,比较两个数组通常涉及到检查它们的内容是否相同,包括元素的顺序和值。以下是一些比较数组的方法:
array1 === array2
JSON.stringify(array1) === JSON.stringify(array2)
,但这种方法有局限性,比如无法处理循环引用的对象。_.isEqual
方法。let array1 = [1, 2, 3];
let array2 = [1, 2, 3];
console.log(array1 === array2); // false,因为它们是不同的引用
let array1 = [1, 2, 3];
let array2 = [1, 2, 3];
console.log(JSON.stringify(array1) === JSON.stringify(array2)); // true
注意:这种方法不适用于包含函数、undefined
、Infinity
、-Infinity
、NaN
或循环引用的数组。
function deepEqual(a, b) {
if (a === b) return true;
if (a && b && typeof a == 'object' && typeof b == 'object') {
let keysA = Object.keys(a), keysB = Object.keys(b);
if (keysA.length != keysB.length) return false;
for (let key of keysA) {
if (!keysB.includes(key) || !deepEqual(a[key], b[key])) return false;
}
return true;
}
return false;
}
let array1 = [1, 2, { a: 3 }];
let array2 = [1, 2, { a: 3 }];
console.log(deepEqual(array1, array2)); // true
NaN
与自身不相等,-0
和+0
被认为是相等的,这些特殊情况需要在比较函数中特别处理。选择哪种比较方法取决于具体的应用场景和需求。