如何在JavaScript中比较数组是否相同?

JS 里面怎么比较两个数组是否相同?有哪些方法可以使用?

使用 Lodash 或者 Underscore

Lodash 文档https://www.lodashjs.com/docs/lodash.isEqual#_isequalvalue-other
Underscore 文档https://underscorejs.github.net.cn/#isEqual

1
2
_.isEqual(array1, array2)   // 返回 boolean
_.isEqual(object1, object2) // 返回 boolean

使用 JSON.stringify 转为字符串比较

1
2
3
var a1 = [1,2,3];
var a2 = [1,2,3];
console.log(JSON.stringify(a1) === JSON.stringify(a2)); // true

使用 toString 转为字符串比较

1
2
3
var a1 = [1,2,3];
var a2 = [1,2,3];
console.log(a1.toString() === a2.toString()); // true

使用 join 转为字符串比较

1
2
3
var a1 = [1,2,3];
var a2 = [1,2,3];
console.log(a1.join('') === a2.join('')); // true

使用 reduce 比较

1
2
3
var a1 = [1,2,3];
var a2 = [1,2,3];
console.log(a1.reduce((a, b) => a && a2.includes(b), true)); // true

使用 every 比较

1
2
3
var a1 = [1,2,3];
var a2 = [1,2,3];
console.log(a1.every((v,i)=> v === a2[i])); // true

自实现数组比较方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function equals (array1, array2) {
if (!array1) {
return false;
}
if(array1 === array2) {
return true;
}
if (array2.length != array1.length) {
return false;
}

for (var i = 0, l=array2.length; i < l; i++) {
if (array2[i] instanceof Array && array1[i] instanceof Array) {
// 如果值是数组,继续递归比较
if (!equals(array2[i], array1[i])) {
return false;
}
} else if (array2[i] != array1[i]) {
// 注意此处未处理数组包含对象的情况,比如: {x:20} != {x:20}
return false;
}
}
return true;
}
equals(a1, a2); // true

以上数组比较方法稍微改动也能适用于 JSON 对象比较

本文由 linx(544819896@qq.com) 创作,采用 CC BY 4.0 CN协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。本文链接为: https://blog.jijian.link/2023-11-21/js-array-is-equal/

如果您觉得文章不错,可以点击文章中的广告支持一下!