• 使用JavaScript进行数组去重——一种高效的算法


      最近比较忙,没时间更新博客,等忙完这阵子会整理一篇使用AngularJS构建一个中型的单页面应用(SPA)的文章,尽情期待!先占个坑。

      数组去重的算法有很多种,以下是一种。

      思路如下:

    1. 定义一个空的对象obj;
    2. 循环数组arr,判断obj[arr[i]]是否为false,如果是则将该数组元素放到result中,并且将obj[arr[i]]置为true;
    3. obj[arr[0]]肯定为false,因为obj为空,arr[0]将被放到result中,并且obj[arr[0]]被置为true;
    4. 循环的过程中如果有哪个元素(比如第n个元素)和arr[0]相同,那么obj[arr[n]]将和obj[arr[0]]相同(都为true),因为key相同,value必定也相同。

      如此便可去重。

      代码如下:

     1 function unique(arr){
     2     var obj={};
     3     var result=[];
     4     for(var i=0;i<arr.length;i++){
     5         if(!obj[arr[i]]){
     6             result.push(arr[i]);
     7             obj[arr[i]]=true;
     8         }
     9     }
    10     return result;
    11 }
    12 var array = [32,12,4,27,12,9,20,32,12,8,44,18];
    13 console.log(unique(array));

     ---------------------------------------------------------------------------------- 华丽的分割线 -------------------------------------------------------------------------------------

      写完之后发现还有一种更简单的数组去重算法,使用了数组的filter方法,以下是代码:

    1 Array.prototype.unique = function(){
    2     return this.filter(function (currentValue, index, arr){ // 当前元素 当前元素索引 当前元素属于的数组
    3         return index <= arr.indexOf(currentValue);
    4     });
    5 };
    6 var array = [1,2,3,12,3,2,1,2,30];
    7 array.unique();

    --------------------------------------------------------------------------- 2019.1.17 Updates ---------------------------------------------------------------------------

    今天发现一种更简单的数组去重方法,利用了ES6的Set数据结构:

    [...new Set(array)]

    简直无敌,妈妈再也不用担心面试官考我数据去重算法啦!

  • 相关阅读:
    linux系统安装过程记录
    Core WebAPI 部署问题
    Linux提示找不到ll命令的解决方法
    Deepin系统编辑新建文档菜单
    phpexcel多sheet分页设置背景色问题
    使用phpexcel时太多问题,建议使用PhpSpreadsheet
    QtBrowser浏览器
    git 查看某一行代码的修改历史
    PHPExcel设置打印区域
    scp 把linux上文件复制到本地报错
  • 原文地址:https://www.cnblogs.com/kagol/p/5343173.html
Copyright © 2020-2023  润新知