美文网首页前端开发工具篇
js数组去重用法归纳

js数组去重用法归纳

作者: 一包 | 来源:发表于2019-02-28 21:33 被阅读0次

    参考原文

    1. indexOf判断法

    • 遍历要去重的数组,如果里面的值新数组没有(indexOf返回-1),push进新数组
    function unique(arr){
        let newArr=[];
        for(let item of arr){
            if(newArr.indexOf(item)==-1){
                newArr.push(item);
            }
        }
        return newArr;
    }
    
    • 判断数组下标,如果当前数组的第 i 项在当前数组中第一次出现的位置不是 i,那么表示第 i 项是重复的,忽略掉。否则存入结果数组。
    function unique(arr){
        let newArr=[];
        for (let i = 0; i < arr.length; i++) {
         if(arr.indexOf(arr[i])==i){
          newArr.push(arr[i]);
         }
      }
        return newArr;
    }
    

    2.排序后相邻去除法

    • 给传入的数组排序,排序后相同的值会相邻,然后遍历排序后数组时,新数组只加入不与前一值重复的值
    function unique3(arr){
      arr.sort();
      var hash=[arr[0]];
      for (var i = 1; i < arr.length; i++) {
         if(arr[i]!=hash[hash.length-1]){
          hash.push(arr[i]);
         }
      }
      return hash;
    }
    

    优化遍历数组法(推荐)

    • 实现思路:双层循环,外循环表示从0到arr.length,内循环表示从i+1到arr.length

    将没重复的右边值放入新数组。(检测到有重复值时终止当前循环同时进入外层循环的下一轮判断)

    function unique4(arr){
      var hash=[];
      for (var i = 0; i < arr.length; i++) {
        for (var j = i+1; j < arr.length; j++) {
          if(arr[i]===arr[j]){
            ++i;
          }
        }
          hash.push(arr[i]);
      }
      return hash;
    }
    

    ES6实现

    • 基本思路:ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

    • Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化。

    • 任何类似数组的对象可以用扩展运算符转换为真正的数组。

    function unique5(arr){
      var x = new Set(arr);
     return [...x];
    }
    

    相关文章

      网友评论

        本文标题:js数组去重用法归纳

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