美文网首页
JavaScript 数组去重

JavaScript 数组去重

作者: April_Le | 来源:发表于2017-03-27 09:18 被阅读0次

1.简单的循环遍历

最容易想到的方法就是for循环遍历数组,并用indexOf判断是否在数组中已经存在相同的值。

var arr=[1,2,3,"1","2",5,6,7,1,8,7];

function unique(arr){
  var res = [];
  var i=0,len=arr.length,val=0;
  for(;i<len;i++){
    val=arr[i];
    if(res.indexOf(val)<0){
      res.push(val);
    }
  }
  return res;
}

console.log(unique(arr)); // [1, 2, 3, "1", "2", 5, 6, 7, 8]

2.对象键值对法

这个方法是新建一个空对象,遍历数组中的值,如果这个值是对象的键值,就跳过,否则就给这个对象添加这个键值。该方法速度快,但是比较耗内存。

要注意的是,因为 js 对象中的键值都是 string 类型,所以判断是否为一个对象的键值时会进行 toString() 转换,如果数组中同时包含数字 1 和字符串“1”这种经过 toString() 转换后相同的,就会混淆。这里的方法是把数组中的类型也记录下来,判断时也判断一下类型是否相同。

var arr=[1,2,3,"1","2",5,6,7,1,8,7];

function unique(arr){
  var obj={},len=arr.length,i=0,res=[];
  for(;i<len;i++){
    var k=arr[i];
    var type=typeof k;
    if(!obj[k]){
      obj[k]=type;  // 把数据类型记录到对象的值中
      res.push(k);     
    }else if(obj[k].indexOf(type)<0){  // 判断是否类型也相同
      obj[k].concat(" "+type); 
      res.push(k);
    }
  }
  return res; 
}

console.log(unique(arr));  //  [1, 2, 3, "1", "2", 5, 6, 7, 8]

3.ES6 set 方法

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。所以可以利用它没有重复值这个特性来对数组去重。

var arr=[1,2,3,"1","2",5,6,7,1,8,7];

function unique(arr){
  var myset=new Set(arr);  // 用Set构造器将Array转换为Set
  var res=[...myset];  // 用...(展开操作符)操作符将Set转换为Array
  return res;
}

console.log(unique(arr));  // [1, 2, 3, "1", "2", 5, 6, 7, 8]

4.使用 filter

使用 filter去除重复元素,因为 indexOf 总是返回第一个元素的位置,后续的重复元素位置与indexOf返回的位置不相等,所以可以被filter过滤掉。

var arr=[1,2,3,"1","2",5,6,7,1,8,7];

function unique(arr){
   var res = arr.filter(function (element, index, self) {
      return self.indexOf(element) === index;
    });
   return res;
}

console.log(unique(arr)); // [1, 2, 3, "1", "2", 5, 6, 7, 8]

相关文章

  • JavaScript数组去重算法实例

    本文主要介绍了JavaScript数组去重算法,结合实例形式总结分析了JavaScript数组去重相关的读写、遍历...

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

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

  • JavaScript - 数组去重

    数组去重 1.for循环 2.0 少了多少行代码~~~ 3.0 indexOf 4.0 map/forEach E...

  • javascript 数组去重

    es6数组去重的方法

  • JavaScript 数组去重

    数组去重,一般都是在面试的时候才会碰到,一般是要求手写数组去重方法的代码。如果是被提问到,数组去重的方法有哪些?你...

  • JavaScript 数组去重

    博客地址:https://ainyi.com/#/32 单数组去重 filter + indexOf() filt...

  • JavaScript数组去重

    数组去重是一个js中在面试中经常被问到的问题,被问到是因为确实能够考察一些问题。如果不使用第三方的工具库,完全使用...

  • Javascript 数组去重

    数组去重 数组去重,一般需求是给你一个数组,调用去重方法,返回数值副本,副本中没有重复元素。一般来说,两个元素通过...

  • 【JavaScript】数组去重

    话说面试常会碰到面试官会问JavaScript实现数组去重的问题,最近刚好在学习有关于JavaScript数组相关...

  • JavaScript数组去重

    当前元素的下标,和从数组里找到该元素的下标一样时,说明是第一次出现 ES6 Set类似于数组,成员值唯一,经过过滤...

网友评论

      本文标题:JavaScript 数组去重

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