在开发时经常遇到比较两个数组是否相等的情况,如何简单高效的比较数组是否相等呢
我们知道数组之间无法直接通过 == 或 === 判断是否相同
var a = [1, 2, 3];
var b = [1, 2, 3];
var temp = 1;
if (a.length != b.length) {
temp = 0;
} else {
for (var i = 0; i < a.length; i++) {
if (a[i] != b[i]) {
temp = 0;
}
}
}
if (temp) alert("两个数组相同");
else alert("两个数组不相同");
除了上述的方法外还有两种方法:
以字符串的方式去比较
(1)使用toString() 方法
var a = [1, 2, 3];
var b = [1, 2, 3];
console.log(a.toString() === b.tostring());// true
// 但数组是复合数组就不行了
var a = [1, 2, { name: "wang" }];
var b = [1, 2, { name: "wanghl" }];
console.log(a.tostring() === b.tostring());// true(判断失败)
(2)使用JSON.stringify()
var a = [1, 2, 3];
var b = [1, 2, 3];
console.log(JSON.stringify(a) === JSON.stringify(b)); // true
// 复合数组也可以判断
var a = [1, 2, { name: "zhang" }];
var b = [1, 2, { name: "zhangss" }];
console.log(JSON.stringify(a) === JSON.stringify(b)); // false
// 但数组位置变化无法判断
var a = [2, 1, 3];
var b = [1, 2, 3];
console.log(JSON.stringify(a) === JSON.stringify(b)); // false(数组应该是相同的)
// 解决办法很简单,使用数组的sort()就行
var a = [2, 1, 3];
var b = [1, 2, 3];
console.log(JSON.stringify(a.sort()) === JSON.stringify(b.sort())); // true