在 Javascript 中如果你需要判断两个数组是否相等,那个这篇文章将能够帮助你。本文将介绍在 js 中如何判断两个数组是否相等。

本文将提供如下几种方法判断两个对象是否相等:

  • js 基于 Lodash 打包的 isEqual() 函数判断数组是否相等
  • js 利用 JSON.stringify() 函数判断数组是否相等

注:在网上你可能过使用 Array.toString()Array.join() 在 js 中判断两个数组是否相等,那是不正确的,因为当数组包含对象元素时,将会出现判断错误。还有很多其他的方法判断 js 中的两个数组是否相等,但是都不实用,在实际的应用中用不到。

提示:默认情况下当数组的元素的顺序不同,则认为数组不同。

不使用 Array.toString()Array.join() 判断的原因

如果使用 Array.toString()Array.join() 在 js 中判断两个数组是否相等时,当数组包含对象元素时,将会出现判断错误,如下给出示例:

const arr1 = [1, 2, 3, {brand: "hongqi"}]
const arr2 = [1, 2, 3, {brand: "jili"}]

console.log(arr1.toString());
// 输出为:"1,2,3,[object Object]"

console.log(arr2.toString());
// 输出为:"1,2,3,[object Object]"

console.log(arr1.toString() === arr2.toString());
// 输出为:true

很明显两个数组不同,而使用 Array.toString() 函数判断的两个数组是相等的,因为所有的对象转换为字符串后,变为 [object Object

使用 Array.join() 与使用 Array.toString() 的情况一样,示例如下:

const arr1 = [1, 2, 3, {brand: "hongqi"}]
const arr2 = [1, 2, 3, {brand: "jili"}]

console.log(arr1.join());
// 输出为:"1,2,3,[object Object]"

console.log(arr2.join());
// 输出为:"1,2,3,[object Object]"

console.log(arr1.join() === arr2.join());
// 输出为:true

推荐:基于 Lodash 打包的 isEqual() 函数判断数组是否相等

isEqual() 函数是作者基于 Lodash 中的 isEqual() 函数,自己打包的 UMD 格式的文件,文件只包含了这一个函数,函数的具体使用方式请查看 Lodash 文档。

文件使用方法

  • 浏览器中:导入文件,直接使用 isEqual() 函数即可。
  • ES模块中:import isEqual form ,/isEqual.min.js(文件位置修改为你的具体位置)

isEqual() 函数不只是能够判断数组是否相同,还能够判断数字、字符串、对象是否相等。

在 JavaScript 中利用 isEqual() 函数判断两个数组是否相等的示例:

const arr1 = [1, 2, 3, {brand: "hongqi"}]
const arr2 = [1, 2, 3, {brand: "jili"}]
const arr3 = [1, 2, 3, {brand: "hongqi"}]

console.log(isEqual(arr1, arr3));
// 输出为:true

console.log(isEqual(arr1, arr2));
// 输出为:false

基于 JSON.stringify() 自定义函数判断数组是否相等

JSON.stringify() 函数是把 JS 对象的属性和值进行序列化,转变为字符串,因此在字符串中包含了 js 对象的所有自由属性和值,因此可以使用 JSON.stringify() 函数在 JavaScript 中判断数组是否相等。

1、基于 JSON.stringify() 自定义 isEqual() 函数:

// 使用箭头函数定义一个判断两个数组是否相同的函数
const isEqual = (value, other) => {
    return JSON.stringify(value) === JSON.stringify(other);
}

// 或者

// 使用正常函数定义一个判断两个数组是否相同的函数
function isEqual(value, other) {
    return JSON.stringify(value) === JSON.stringify(other);
}

2、在 js 中实用自定义 isEqual() 函数判断两个数组是否相等示例:

function isEqual(value, other) {
    return JSON.stringify(value) === JSON.stringify(other);
}

const arr1 = [1, 2, 3, {brand: "hongqi"}]
const arr2 = [1, 2, 3, {brand: "jili"}]
const arr3 = [1, 2, 3, {brand: "hongqi"}]

console.log(isEqual(arr1, arr3));
// 输出为:true

console.log(isEqual(arr1, arr2));
// 输出为:false

注:当两个对象的包含的属性和值相同,只是属性的顺序不同时,也会判断为两个对象不同,因此判断两个数组是否相同时,也要谨慎使用该方法。

结语

本文中介绍了两种方法在 js 中判断两个数组是否相等,分别是:js 基于 Lodash 打包的 isEqual() 函数判断两个数组是否相等,js 利用 JSON.stringify() 函数判断两个数组是否相等。在网上你可能过使用 Array.toString()Array.join() 在 js 中判断两个数组是否相等,那是很可能出错的,因为当数组包含对象元素时,将会出现判断错误;还有很多其他的方法判断 js 中的数组是否相等,但是都不实用,在实际的应用中用不到。