java比较两个数组是否有相同的元素_[30秒JS 数组篇] 8. 如何对比两个数组是否相同...

201ed33ab22333cabfa7b3d2b0d8064b.png

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

const a = [1, 2, 3]
const b = [1, 2, 3]
a === b // false

直接对比是不行的,因为在JavaScript中,数组和对象是按引用而不是按值进行比较的。

JSON.stringify 转为字符串后在进行对比

const equals = (a,b) => JSON.stringify(a) === JSON.stringify(b)

const a = [1,2,3]
const b = [1,2,3]

equals(a, b) // true

但是某种情况下会有问题

// 接上个代码段
const str = 'a'
const strObj = new String('a')
str === strObj // false
equals([str], [strObj]) // true,但应该是false

null === undefined // false
equals([null] , [undefined]) // true 但应该是false 

更好的方式 用Array.prototype.every()

const equals = (a, b) => 
  a.length === b.length && 
  a.every((v,i) => v === b[i])

const a = [1,2,3]
const b = [1,2,3]
const str = 'a'
const strObj = new String('a')

equals(a,b) // true
equals([str], [strObj]) // false
equals([null], [undefined]) // false

如何数组是乱序如何处理 用Array.prototype.filter()

cosnt equalsIgnoreOrder = (a,b) =>{
  if(a.length !== b.length) return false
  const uniqueValues = new Set([...a, ...b])
  for ( const v of uniqueValues){
    const aCount = a.filter(e=>e === v).length
    const bCount = b,filter(e->e === v).length
    if(aCount != bCount) return false
  }
  return true
}

https://www.30secondsofcode.org/blog/s/javascript-array-comparison

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值