数组去重的几种常见写法

方法一:双重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
}
发布了22 篇原创文章 · 获赞 2 · 访问量 2867

猜你喜欢

转载自blog.csdn.net/gaodda/article/details/103125363