数组去重

原创 2018年04月17日 17:47:37

数组去重

可参考此篇

一个宇宙通用的去重方案

function unique(arr){
  let newArr = []
  for(let i = 0, length = arr.length; i < length; i++){
    for(var j = 0, len = newArr.length; j < len; j++){
      if(newArr[j] === arr[i]){  break  }
    }
    if(j === len){  newArr.push(arr[i])  }
  }
  return newArr
}
var arr = [1,4,3,NaN,{},{},5,9,8,8,6,5,NaN,3]
console.log(unique(arr)) //[1, 4, 3, NaN, {}, {}, 5, 9, 8, 6, NaN]

  鉴于{} !== {}NaN !== NaN,所以它们都不算作重复。

用数组的indexOf方法实现

  Array.prototype.indexOf()方法返回的是元素在数组中第一次出现的位置,如果元素不在数组中,那么返回-1。

function unique(arr){
  let newArr = []
  for(let i = 0, len = arr.length; i < len; i++){
    let current = arr[i]
    if(newArr.indexOf(current) === -1){
      newArr.push(current)
    }
  }
  return newArr
}
var arr = [1,4,3,NaN,{},{},5,9,8,8,6,5,NaN,3]
console.log(unique(arr)) // [1, 4, 3, NaN, {}, {}, 5, 9, 8, 6, NaN]

用filter+indexOf实现

function unique(arr){
  return arr.filter( (value, index, array) => {
    return arr.indexOf(value) === index    
  })
}
var arr = [1,4,3,NaN,{},{},5,9,8,8,6,5,NaN,3]
console.log(unique(arr))  // [1, 4, 3, {}, {}, 5, 9, 8, 6]

  这个方法会忽略NaN。

ES6的Set对象

function unique(arr){
  var mySet = new Set(arr)
  return Array.from(mySet)
}
//Array.from()可以将set对象转换为array对象,展开操作符...也可以。
//所以return后边也可以用[...mySet]
var arr = [1,4,3,NaN,{},{},5,9,8,8,6,5,NaN,3]
console.log(unique(arr))  //[1, 4, 3, NaN, {}, {}, 5, 9, 8, 6]

  可以实现NaN的去重。
  上边的函数可以简化成function unique(arr){ return [...new Set(arr)]}

数组的filter方法加Map对象也可以实现

  但是我觉得不如Set对象(逃)

function unique (arr) {
    var myMap = new Map()
    return arr.filter( (a) => {
     return !myMap.has(a) && myMap.set(a)  
    })
}

var arr = [1,4,3,NaN,{},{},5,9,8,8,6,5,NaN,3]
console.log(unique(arr))  //[1, 4, 3, NaN, {}, {}, 5, 9, 8, 6]

  其中myMap.set(a)是在对象myMap里边添加一个key为a的新元素,如果是myMap(a,1)表示给这个新元素的value设置为1。myMap.has(a)用来判断对象myMap方法是否存在key为a的新元素。

版权声明:本文为博主原创文章,转载请附上原文地址 https://blog.csdn.net/writing_happy/article/details/79978273

JavaScript Array数组去重源码下载

  • 2017年06月29日 15:40
  • 2KB
  • 下载

数组去重,简短而有效的方法

var arr = [1,2,3,4,5,6,7,8,1,2,3,4,5,12,13,14,15]; /* js对象里没有重复的key,所以可以通过以下方法来解决数组去重 ...
  • u013415353
  • u013415353
  • 2016-07-03 00:20:30
  • 396

C# asp.net中字符串数组去重

 public static void Purge(ref ListneedToPurge)        {                        for(int i=0;i        ...
  • chunquanwang
  • chunquanwang
  • 2010-04-21 13:42:00
  • 1356

数组去重的五种方法

需求描述:为Array类型添加公共方法Unique,去掉给定数组中的重复元素。 五种方法: /*方法一*/ //为Array类型的prototype对象添加unique1方法 Array....
  • St_Sp_En
  • St_Sp_En
  • 2017-04-18 17:49:28
  • 1406

数组去重2种最好的方法

两种具有代表性的js数组去重方法
  • sinat_31597631
  • sinat_31597631
  • 2017-06-13 16:46:50
  • 559

数组去重的几种封装方法

1、遍历数组法: 此方法缺点: IE8以下不支持 indexOF function unique(array){ var n = []; for(var i =0; i...
  • cxz792116
  • cxz792116
  • 2016-08-31 16:33:09
  • 176

JS数组去重2017

现在要求去重下面这个数组 [1, 2, 3, 3, 3, '0', '1', '2', '测试', '重复', '重复', NaN, NaN, false, false]; 方法一:ES6 Se...
  • zhalcie2011
  • zhalcie2011
  • 2017-06-06 14:58:54
  • 697

数组去重方法大全

原文链接:再见,重复的你(数组去重)思路一:双层循环,外层循环元素,内层循环时比较值 如果有相同的值则跳过,不相同则push进数组Array.prototype.distinct = functio...
  • a214161398a
  • a214161398a
  • 2016-05-15 13:19:40
  • 4255

js数组去重的三种常用方法总结

第一种是比较常规的方法 思路: 1.构建一个新的数组存放结果 2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比 3.若结果数组中没有该元素,则存到结果数...
  • wangshu696
  • wangshu696
  • 2015-01-14 18:38:35
  • 6414

面试题——4种数组去重的方法

科技优家 2017-01-04 07:38 数组去重或者其衍生作为笔试题或者机试题出现的几率也是很大的,写出的方法越多,则让面试官觉得你思维越开阔,那么成功的几率当然就大了。 废话不多说,下面...
  • u011277123
  • u011277123
  • 2017-01-05 11:38:04
  • 5760
收藏助手
不良信息举报
您举报文章:数组去重
举报原因:
原因补充:

(最多只允许输入30个字)