美文网首页
数组去重的尝试

数组去重的尝试

作者: Corro | 来源:发表于2017-06-10 22:25 被阅读0次

方法一:

定义一个结果数组rs,遍历原数组arr,并与结果数组比较:若在结果数组rs中不存在,则加入当前元素到结果数组,并继续遍历arr下一个元素;若存在,则直接遍历下一个元素。

遍历第一个元素1

第一个元素直接添加到结果数组,继续遍历第二个:

遍历第二个元素2

第二个元素2在rs中不存在,则加入rs数组,并继续遍历下一个:


遍历第三个元素1 遍历第四个元素2

第三个元素1在rs中存在,则直接遍历下一个,下一个2也存在于rs,则继续遍历,直到元素为3时,rs数组中不存在,则加入数组,然后继续:

遍历到元素3时

下面为实现的函数:

function unique(arr) {
  var rs = [arr[0]]
  for (var i = 0, arr_len = arr.length; i < arr_len; i++) {
    for (var j = 0, rs_len = rs.length; j < rs_len; j++) {
      if (arr[i] === rs[j]) { 
        j = 0
        i++
      }
    }
    if (arr[i]) rs.push(arr[i])
  }
  return rs
}
var arr = [1,2,1,3,4,5,3,6]
console.log(unique(arr))
结果:[1,2,3,4,5,6]

方法二:
先对数组进行排序,然后遍历判断相邻两个元素是否相等,若相等直接删除后一个元素,下一个元素继续与当前元素进行比较:

数组排序

遍历第一个元素1,与下一个元素比较,两个相等,则删除第二个元素:

遍历第一个元素1 删除第二个元素 删除后的数组

继续进行比较:

继续比较

两个元素不同,则保留第二个元素,然后主元素为第二个元素2,继续比较下一个:

比较元素2与元素3

两个元素不同,则保留,继续遍历与比较:

比较元素3与下一个元素3

两个相等,则删除后一个相等元素:

删除元素3

删除后的数组:

新数组

继续遍历:

继续比较

步骤方法以此类推。
实现函数:

function unique(arr) {
  arr.sort()
  for (var i = 0, len = arr.length; i < len; i++) {
    if (arr[i + 1] && arr[i] === arr[i + 1]) {
      arr.splice(i, 1)   // 删除当前
      i--   //  下个循环回退当前位
    }
  }
  return arr
}
var arr = [1, 2, 6, 1, 3, 3, 4, 5]
console.log(unique(arr))
结果:[1, 2, 3, 4, 5, 6]

方法三:
使用对象的key,value方式进行快速查询元素的存在,首定义一个空对象obj,遍历数组,使用元素作为key查询obj对象中是否存在,若不重复,将元素作为对象新属性的key并赋值为1,并将元素加入rs数组:

function unique(arr) {
  var obj = {},
       rs = []
  arr.forEach(function (item) {
    if (!obj[item]) { // 判断对象中是否存在以当前元素作为key的属性
      obj[item] = 1  // 添加以当前元素作为key的新属性到obj
      rs.push(item)   // 添加当前元素到结果数组
    }
  })
  return rs
}

方法四
ES6中添加了Set集合,Set集合中元素特点为唯一性,无重复,并且Array对象中新加了一个方法from(), 可以将类数组元素转化成数组,利用这两个API可以快速进行数组去重:

function unique(arr) {
  return Array.from(new Set(arr))
}
var arr = [1, 2, 6, 1, 3, 3, 4, 5]
console.log(unique(arr))
结果:[1, 2, 3, 4, 5, 6]

这是四个去重方法的实现,当然如果环境允许,优选第四种,次选第三种。

相关文章

  • 数组去重的尝试

    方法一: 定义一个结果数组rs,遍历原数组arr,并与结果数组比较:若在结果数组rs中不存在,则加入当前元素到结果...

  • Array集结号

    实现数组去重的几种方法 数组去重一 数组去重二 利用数组indexof+push实现数组去重 数组去重三 利用对象...

  • 实现数组去重有哪些方式

    简单的数组去重 数组对象去重

  • js:数组去重

    数组去重的常见写法: 数组去重封装成方法: es6的数组去重(Array.from):

  • 数组去重的四种方法

    利用双for循环去重 利用对象数组去重 利用对象数组去重并且记录重复次数 通过创建一个新数组进行数组去重

  • js数组去重、对象数组去重

    普通数组去重 一、普通数组去重 方法一:遍历数组法 方法二:排序法 方法三:对象法 对象数组去重 方法一:将对象数...

  • javascript数组去重,数组对象去重

    利用Reduce去重 function unique(arr) {var obj = {};arr = arr.r...

  • 数组去重的几种方式

    上篇我们写到了数组中包含多条对象的去重方式数组中包含多条对象的去重方式,今天我们就写一下普通数组去重吧. 数组去重...

  • ES6数组去重

    普通数组去重 方法1 方法2 对象数组去重

  • js reduce去重用法

    reduce不仅仅可以数据累加,还可以实现去重效果。 重复次数计算 数组去重 数组对象去重,转为数组 对象去重

网友评论

      本文标题:数组去重的尝试

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