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

    1.通过循环遍历数组,根据判断flag的值来确定是否将值放入到数组中

     1 //数组去重:
     2     var arr = [5,1,2,1,2,2,1,2,1,2,3,4,3,4,5,3,4,5,4,3,2,1];
     3     //希望得到的结果为[1,2,3,4,5]
     4     //1 创建一个结果数组
     5     var resultArr = [arr[0]];
     6     var flag;
     7     //2 遍历数组
     8     for(var i = 1; i < arr.length; i++){
     9       // 正确的实现方式
    10       flag = true;//假设当前arr[i]可以放入到resultArr中
    11       for(j = 0; j < resultArr.length; j++){
    12         //设置可以让假设失败的条件:如果偶遇任何一个元素相等,即说明不能放入
    13         if(arr[i] === resultArr[j]){
    14           flag = false;
    15        }
    16       }
    17       //根据flag的值设置最终操作
    18       if(flag){
    19         resultArr.push(arr[i]);
    20       }
    21     }
    22     console.log(resultArr);

    2.通过Es6语法进行数组去重

    1 //先定义一个重复的数组
    2 var arr = [1,1,2,2,2,3,3,4,4] 
    3 
    4 var set = new Set(arr) // {1,2,3,4}
    5 var newArr = Array.from(set) // 再将set转变成array
    6 console.log(newArr) // [1,2,3,4]

    实现的原理:SetArray的区别在于:Array中允许出现重复的元素,例如[1,2,2,3];而Set中的所有元素都是唯一的,只能是{1,2,3}。利用这一特性,我们就可以迅速地去掉数组中重复的元素。

    3.通过创建空对象,对象里面的属性名是数组的每个值,可以计算每个值重复的个数

     1 //使用数据存储功能完成数组去重并计数的案例
     2         var arr = [5,1,2,1,1,2,3,2,2,1,2,1,2,3,4,3,4,5,3,4,5,4,3,2,1];//货车
     3         //创建一个货物单
     4         var obj = {};
     5         var item
     6         //将货车中的货物一个个的拿过来看
     7         for(var i = 0;i<arr.length;i++){
     8             //看一看arr[i]这个货物有没有(检测obj中是否含有arr[i]这个属性)
     9             item = arr[i];
    10             //如果有值,这个值一定大于等于1
    11             //如果没有,默认为undefined
    12             if(obj[item]){
    13                 //说明有值,让值++
    14                 obj[item]++;
    15             }else{
    16                 //说明没有值,设置值为1
    17                 obj[item] = 1;
    18             }
    19 
    20         }
    21         console.log(obj);
  • 相关阅读:
    MyBatis mapper.xml中SQL处理小于号与大于号 和小于等于号
    iOS打包时Export的四个选择是什么意思?
    Xcode中New Build System和 Legacy build system的区别
    Xcode中Debug、Profile、Release的区别
    versionCode和versionName区别
    Android Studio 3.5 plugin中找不到Flutter插件
    Javascript 面向对象编程(一):封装
    Flutter-常用第三方库
    iOS info.plist 中的隐私权限
    Flutter打包ios应用流程详解
  • 原文地址:https://www.cnblogs.com/md-lw/p/8744869.html
Copyright © 2011-2022 走看看