美文网首页
分享两种js中数组去重的方法

分享两种js中数组去重的方法

作者: 超人鸭 | 来源:发表于2019-09-26 11:17 被阅读0次

    对于数组项为基本类型(基本为数字或字符串)的:

    • 使用filter数组去重
    var arr = [1, 2, 2, 3, 4, 5, 5, 6, 6, 6, 7]
    function fn(arr) {
      return arr.filter((x, index, self) => self.indexOf(x) === index)
    }
    

    比较简单粗暴,利用indexOf只会找到第一个匹配项的下标这个特性,忽略重复的数组项。

    • 利用对象的key去重
    var arr = [1, 2, 2, 3, 4, 5, 5, 6, 6, 6, 7]
    function fn(arr) {
      let hashTable = {}
      let data = []
      for (let i = 0; i < arr.length; i++) {
        if (!hashTable[arr[i]]) {
          hashTable[arr[i]] = true
          data.push(arr[i])
        }
      }
      return data
    }
    

    利用了对象的key值去重,当然,对于这种数组项为基本类型的数组,去重还有很多方法,es6出了Set这种数据类型,对普通数组的去重更是简单粗暴。

    但在工作中,去重的需求并不是那么简单,往往数组是一个对象数组,然后根据其中的某一个字段去重,对于这种需求,我们还是可以用上面的方法,利用对象的key值去重:

    let arr1 = [{id: 1}, {id: 2}, {id: 3}, {id: 4}]
    let arr2 = [{id: 5}, {id: 2}, {id: 3}, {id: 8}]
    // 比如这个,两个数组合并然后根据id这个字段去重
    function fn(arr1,arr2){
      let arr = arr1.concat(arr2)
      let hashTable = {}
      let data = []
      for (let i = 0; i < arr.length; i++) {
        if (!hashTable[arr[i].id]) {
          hashTable[arr[i].id] = true
          data.push(arr[i])
        }
      }
      return data
    }
    

    觉得这个利用key值的方式还是挺万能的,之后看到还有好的方式超人鸭也会继续添加在这篇文章里面。

    相关文章

      网友评论

          本文标题:分享两种js中数组去重的方法

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