数组去重的几种常见写法

方法一:双重for循环
/** 双重循环去重 */
removeDuplication (arrayA, arrayB) {
  let arrNew = []
  if (arrayA.length && arrayB.length) {
    arrNew = arrayA.concat(arrayB)
    for (let x = 0, len = arrNew.length; x < len; x++) {
      for (let y = x + 1; y < len; y++) {
        if (arrNew[x] === arrNew[y]) {
          arrNew.splice(y, 1)
          // splice 会改变数组长度,所以要将数组长度 len 和下标 j 减一
          len--
          y--
        }
      }
    }
  }
  return arrNew
}
方法二:Array.sort()
/** Array.sort()去重 */
removeDuplication (arrayA, arrayB) {
   let arrNew = []
   if (arrayA.length && arrayB.length) {
     arrNew = arrayA.concat(arrayB)
     // 排序
     arrNew.sort()
     // 设置比较值
     let result = [arrNew[0]]
     for (let i = 1, len = arrNew.length; i < len; i++) {
       if (arrNew[i] !== arrNew[i - 1]) {
         result.push(arrNew[i])
       }
     }
     return result
   }
 }
方法三:for…of + includes()
/** for...of + includes()去重 */
removeDuplication (arrayA, arrayB) {
  let arrNew = arrayA.concat(arrayB)
  let result = []
  for (let i of arrNew) {
    !result.includes(i) && result.push(i)
  }
  return result
}
方法四:Array.filter() + indexOf
/** Array.filter() + indexOf() */
removeDuplication (arrayA, arrayB) {
  let arrNew = arrayA.concat(arrayB)
  return arrNew.filter((item, index) => {
    return arrNew.indexOf(item) === index
  })
}
方法五:Array.from() + new Set()
/** Array.from() + new Set() */
removeDuplication (arrayA, arrayB) {
  return Array.from(new Set([...arrayA, ...arrayB]))
}
方法六:for…of + Object
/** for...of + Object */
removeDuplication (arrayA, arrayB) {
  let arrNew = arrayA.concat(arrayB)
  let result = []
  let obj = {}
  for (let i of arrNew) {
    if (!obj[i]) {
      result.push(i)
      // 利用对象key值唯一特性
      obj[i] = 1
    }
  }
  return result
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值