美文网首页
`JS` 两个数组如何对比

`JS` 两个数组如何对比

作者: lazy_tomato | 来源:发表于2021-07-19 21:39 被阅读0次

START

  • 记录一下数组对比的问题,下次不要犯这种低级错误。
  • 同事写了一个bug,进入页面,疯狂的一直调用一个接口。debugger定位问题,发现同事写了一个很离谱的if语句。
  • 简单来说 他写了一个if语句,如果两个变量相等,不执行后续逻辑;不相等,调用数据获取接口。但是两个变量都是数组,(引用数据类型,必然是不会相等的)就导致了问题发生。

问题详细解读

问题既然找到了,那就这里详细说明一下,问题出现的原因。

o(╥﹏╥)o,说来有点菜,看半天都没反应过来,这里是有问题的,后续同事指点才想起来,所以想写一篇博客记录一下。

image.png e2e3be7dba6793a2fee5213bedde2e4.png
  • 其实道理很简单,就像数组,对象,都是引用类型,变量a和变量b都是存储的[1,2,3]在堆中的引用地址,两者对比,肯定是不相等的。
  • 知道这个原理,就会发现,这个bug其实很简单。

两个数组如何比较是否相等?

  • 上述问题已经描述清楚了,那我们如何解决掉这个bug呢,显然直接全等于进行比较是有问题的,那么如何对比两个数组?

  • 查看了很多有关于js中数组对比的方案,没找到比较靠谱的方案,但是我依旧整理了一下我个人收集的,对比两个数组的方法。

方法

将数组转换成字符串,对比两个字符串是否完全相等


let a=[1,2,3]

let b=[1,2,3]

console.log(a.toString(),b.toString(),a.toString()===b.toString())

console.log(JSON.stringify(a),JSON.stringify(b),JSON.stringify(a)===JSON.stringify(b))

打印效果

1,2,3   1,2,3   true

[1,2,3] [1,2,3] true

弊端(这种方式依旧存在一些弊端)

有一说一这种方式是百度到的最常见的,而且的最方便的,但是依旧会存留问题

1.数组顺序不一致,(可以使用.srot()做一下排序)

2.由于转义成了字符串,会导致原本是数字的数据,会变成字符串类型,可能会影响对比的准确性

END

  • 暂时没有发现更好的更完善的能够兼容所有情况的数组对比的案例,后续发现了在做补充
  • 理论上也应该举一反三,除了数组对比,对象对比,也应该考虑

相关文章

网友评论

      本文标题:`JS` 两个数组如何对比

      本文链接:https://www.haomeiwen.com/subject/hvfkmltx.html