zoukankan      html  css  js  c++  java
  • Javascript数组去重的几种方法

    Javascript数组去重的几种方法

    1. 新建空数组,通过for...of(ES6)循环遍历,通过indexOf判断元素是否在新数组中存在,将不存在的(indexOf(n)==-1)元素push到新数组中:
           let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2];
    
           function removeDup_indexOf(originalArr){
            let newArr = [];
            for(n of originalArr){
                if(newArr.indexOf(n)==-1){
                    newArr.push(n);
                }
            }
            return newArr;
           }
           let arr1 = removeDup_indexOf(arr);
    

    也可首先将原始数组的第一项放到新数组中,从第二项开始循环判断:

         let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2];
         function removeDup_index(originalArr){
            //index=0的项先加到数组里,之后从第二项开始循环
            let newArr = [originalArr[0]];
            for(var i=1;i<originalArr.length;i++){
                if(originalArr.indexOf(originalArr[i])==i){
                    newArr.push(originalArr[i]);
                }
            }
            return newArr;
           }
           let arr2 = removeDup_index(arr);
    
    1. 利用相邻数组的比较,将与前一个元素不同的元素push到数组中,注意:这种方式要首先将数组进行排序,用slice()方法深拷贝原始数组进行排序,避免对原数组造成影响。
      let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2];
      function compareAdjoin(originalArr){
             let orderedArr = originalArr.slice().sort();//先进行排序,然后相邻的数组元素进行比较
             let newArr = [orderedArr[0]];
             for(var i=1;i<orderedArr.length;i++){
                  if(orderedArr[i]!=orderedArr[i-1]){
                      newArr.push(orderedArr[i]);
                  }
             }
             return newArr;
         }
         let arr3 = compareAdjoin(arr);
      
    2. 利用object{key:value}, key值不能重复的特性。创建一个新的obj{ },将数组的每个元素作为key添加到obj中,并将obj[arr[i]]不存在的元素push到新数组中 ,obj= { arr[1]: value,arr[2]:value...}注意:无需关注value的值,可任意复制,仅是通过key判断元素是否已添加过。
         let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2];
         function removeDup_obj(originalArr){
                let newArr=[];
                let obj={};
                for(n of originalArr){
                    if(!obj[n]){
                        obj[n] = 1;
                        newArr.push(n);
                    }
                }
                return newArr;
           }
           let arr4 = removeDup_obj(arr);
    
    1. 倒叙循环(避免删除过程中数组长度变化影响遍历)排序过的数组,将与后一项相同的元素通过splice方法从原数组中删除,同#2,首先将数组进行排序,用slice()方法深拷贝原始数组进行排序,避免对原数组造成影响。
         let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2];
         function removeDup_splice(originalArr){
               let orderedArr = originalArr.slice().sort();
               for(var i = orderedArr.length-1;i>0;i--){
                    if(orderedArr[i-1]===orderedArr[i]){
                        orderedArr.splice([i-1],1);
                    }
               }
               return orderedArr;
           }
           let arr5 = removeDup_splice(arr);
    
  • 相关阅读:
    shFlags简介
    ubuntu下mediawiki的使用
    保护眼睛(ubuntu 和 chrome)
    ubuntu14.04下安装ngnix,mediawiki,nodebb,everything,gitlab
    JavaScript之闭包就是个子公司
    第三次作业——个人作业——软件产品案例分析
    第二次作业——结对项目之需求分析与原型设计
    《软件工程实践》第一次作业
    2016的软件工程开始啦
    Spring-Boot-应用可视化监控
  • 原文地址:https://www.cnblogs.com/Nancy-wang/p/9015435.html
Copyright © 2011-2022 走看看