数组去重的几种简单方法

1.最简单的就是ES6的实现
function unique(arr){ return [...new Set(arr)]; }
或者是
function unique(arr){ return Array.from(new Set(arr)); }

2.就是我之前最常用的,思想就是先新建一个数组temp,遍历一下,判断这个新数组中有没有当前这个值,没有就push进去,最简单数组去重法

function unique(array){
  var temp = []; //一个新的临时数组
  for(var i = 0; i < array.length; i++){
      if(temp.indexOf(array[i]) == -1){
          temp.push(array[i]);
      }
  }
  return temp;
}

3.第三中的想法和第二种差不多,是通过遍历来判断当前这个值是不是在原数组里第一次出现,也就是说通过判断这个元素的位置是不是等于当前的下标,是那就是第一次出现啦,很简单。

function unique(array){
  var temp = []; //一个新的临时数组
  for(var i = 0; i < array.length; i++){
      if(array.indexOf(array[i]) === i){
          temp.push(array[i]);
      }
  }
  return temp;
}

4.第四种就是根据第三中的想法引申出来了的,是通过filter函数来实现

function unique(array){
  return array.filter( (element, index, self) => {
    return self.indexOf( element ) === index;
  });
}

5.对象键值法去重(这是我找的网上的,感觉挺好,虽然麻烦些)

/* * 速度最快, 占空间最多(空间换时间)
*
* 该方法执行的速度比其他任何方法都快, 就是占用的内存大一些。
* 现思路:新建一js对象以及新数组,遍历传入数组时,判断值是否为js对象的键,
* 不是的话给对象新增该键并放入新数组。
* 注意点:判断是否为js对象键时,会自动对传入的键执行“toString()”,
* 不同的键可能会被误认为一样,例如n[val]-- n[1]、n["1"];
* 解决上述问题还是得调用“indexOf”。*/
function unique(array){ 
  var temp = {}, r = [], len = array.length, val, type; 
  for (var i = 0; i < len; i++) {
        val = array[i];
        type = typeof val; if (!temp[val]) {
            temp[val] = [type];
            r.push(val);
        } else if (temp[val].indexOf(type) < 0) {
            temp[val].push(type);
            r.push(val);
        }
    } 
  return r;
} 

暂时先这样,有好的我再继续更新,哈哈

这里还有一个更全的链接,请移步这里:他山之石

你可能感兴趣的:(数组去重的几种简单方法)