JS 判断两个数组是否相等,元素以及顺序相等,顺序不同但元素相等
2021-05-30 08:07
标签:功能 length 左右 顺序 img 区别 ber 图片 === 在日常开发中,判断两个数组是否相等应该是较为常见的场景,因为常用,所以想着简单记录下。关于判断数组相等,这里我分为两种场景,第一种是数组完全相等,即数组元素相同且元素顺序一致;第二则为元素相同但顺序不同,我会分开讨论。 注意,这里不讨论数组元素是函数,正则等特殊情况,因为实际开发中也很难遇到这样的场景。但如果需要对比的数组是多维数组,可以考虑利用 如果数组元素只是字符串,数字,布尔值这些类型,可以考虑使用 但上述两种做法,都无法对比数组中包含 这是因为对于 而对于 这是因为对于 因此考虑基本数据类型以及 这里利用了 在实际开发中,会有这样一个场景,需要我们认定两个元素相同但顺序不同的数组为相同数组,比如数组 比如一个功能设置模块,默认就勾选了 那么现在我将这两个选项清空,随后勾选B,再勾选A,很明显,这个数据层保存的数据为 考虑到实际场景中对于值的唯一性维护,因此数组中理论上不会存在相同的值,因此我们可以这么实现: 注意,上述实现是考虑到特殊场景不会让数组有重复项,因此可以这么实现,但如果数组有重复元素上述实现就不可行,比如这个例子就不OK: 针对这种情况还是得考虑将两个数组进行排序,再按数组完全相等的思路对每一位进行对比。 另外,关于 那么本文到这里结束。 JS 判断两个数组是否相等,元素以及顺序相等,顺序不同但元素相等 标签:功能 length 左右 顺序 img 区别 ber 图片 === 原文地址:https://www.cnblogs.com/echolun/p/14752478.html壹 ? 引
flat
进行降维再使用如下方法,OK,本文开始。贰 ? 数组完全相等
JSON.stringify
或者join(‘‘)
的做法,目的就是转为字符串,直接判断字符串是否相等,比如:// 基于join解决基本判断
const isArrEqual = (arr1, arr2) => {
return arr1.join("") === arr2.join("");
};
isArrEqual([1, 2, 3], [1, 2, 3]);// true
isArrEqual([1, ‘‘, ‘b‘, false], [1, ‘‘, ‘b‘, false]);// true
isArrEqual([1], [1, 2]);// false
// 基于JSON.stringify解决基本判断
const isArrEqual = (arr1, arr2) => {
return JSON.stringify(arr1) === JSON.stringify(arr2);
};
isArrEqual([1, 2, 3], [1, 2, 3]);// true
isArrEqual([1, ‘‘, ‘b‘, false], [1, ‘‘, ‘b‘, false]);// true
isArrEqual([1], [1, 2]);// false
undefined
,null
的情况,比如如下对比就暴露了问题:[undefined, 1, null, false].join("") === [‘‘, 1, null, false].join("");// true
join
而言,undefined
与null
都会 被转为空字符串,所以上述代码左右两边得到的都是‘1flase‘
,因此相等。JSON.stringify
而言同样会存在这样的问题,比如如下例子:JSON.stringify([undefined, 1, NaN]) === JSON.stringify([null, 1, null]);// true
JSON.stringify
而言,undefined
和NaN
都会被转为null
,这才导致上述代码相等。NaN
,其实可以这么实现它:const isArrEqual = (arr1, arr2) => {
return arr1.length === arr2.length && arr1.every((ele, index) => Object.is(ele, arr2[index]));
};
isArrEqual([1, ‘b‘, false, undefined, null, NaN], [1, ‘b‘, false, undefined, null, NaN]);// true
Object.is
方法,它接受两个参数,用于核对这两个参数是否相等,即便是NaN
它也能有效判断。叁 ? 元素相同顺序不同
[A,B]
与[B,A]
是相同数组。[A,B]
两个选项,下方会有一个更新按钮,只有用户修改了设置才会将更新按钮变为可点击状态,毕竟设置没改,就没更新的必要。[B,A]
,但对于用户而言,我并未修改任何设置,此时按钮其实就没必要展示为可点击状态,因此我们需要认定[A,B]
与[B,A]
为相同值。const isArrEqual = (arr1, arr2) => {
return arr1.length === arr2.length && arr1.every((ele) => arr2.includes(ele));
};
isArrEqual([1, ‘b‘, false, undefined, null, NaN], [1, null, ‘b‘, undefined, false, NaN]);// true
isArrEqual([1, 1], [1, null]);// true
JSON.stringify
其实还有其它妙用,可参考博主这篇文章,json.stringify()的妙用,json.stringify()与json.parse()的区别。NaN
是JS中唯一一个与自身不相等的存在,如何判断一个值是否等于NaN
?window.isNaN
与Number.isNaN
又有什么区别?有兴趣可以阅读博主这篇文章js中的NaN,isNaN与Number.isNaN的区别,如何判断一个值严格等于NaN
文章标题:JS 判断两个数组是否相等,元素以及顺序相等,顺序不同但元素相等
文章链接:http://soscw.com/essay/89480.html