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

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

  • 使用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值的方式还是挺万能的,之后看到还有好的方式超人鸭也会继续添加在这篇文章里面。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,272评论 0 4
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,148评论 1 32
  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 1,105评论 0 1
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,163评论 0 21
  • https://nokogiri.org/tutorials/installing_nokogiri.html
    biubiudog阅读 77评论 0 0