数组去重的6种方法,以及性能比较

本文介绍六种不同的数组去重方法,包括使用新数组存储、原地修改数组、利用对象存储、排序后去重、Set集合及高效对象法,并对比了各种方法的优缺点和执行效率。

第一种方法 - 创建新的空数组,indexOf ==-1,则往空数组push这个元素耗时6007ms

        let arr1 = Array.from(new Array(100000), (x, index) => {
            return index;
        })

        let arr2 = Array.from(new Array(50000), (x, index) => {
            return index + index;
        })

        let arr = arr1.concat(arr2);

        let start = new Date().getTime();
        console.log('开始数组去重');

        function filter(arr) {
            let newarr = [];
            arr.forEach(item => {
                if (newarr.indexOf(item) == -1) {
                    newarr.push(item);
                }
            })
            return newarr;
        }
        console.log(filter(arr));

        let end = new Date().getTime()
        console.log('耗时', end - start);     //耗时6007

在这里插入图片描述

第二种方法 - 在原数组操作, indexOf !=当前下标,splice当前元素 — 耗时6542ms

        let arr1 = Array.from(new Array(100000), (x, index) => {
            return index;
        })

        let arr2 = Array.from(new Array(50000), (x, index) => {
            return index + index;
        })

        let arr = arr1.concat(arr2);

        let start = new Date().getTime();
        console.log('开始数组去重');

        function filter(arr) {
            for (let i = 0; i <= arr.length - 1; i++) {
                if (arr.indexOf(arr[i]) != i) {
                    arr.splice(i, 1);
                    i--;
                }
            }
            return arr;
        }
        console.log(filter(arr));

        let end = new Date().getTime()
        console.log('耗时', end - start);     //耗时6542

在这里插入图片描述
第三种方法 - 在原数组操作,与最后一个元素交换,删去最后一个元素, 缺点:会打乱顺序 — 耗时6049ms

        let arr1 = Array.from(new Array(100000), (x, index) => {
            return index;
        })

        let arr2 = Array.from(new Array(50000), (x, index) => {
            return index + index;
        })

        let arr = arr1.concat(arr2);

        let start = new Date().getTime();
        console.log('开始数组去重');

        function filter(arr) {
            for (let i = 0; i <= arr.length - 1; i++) {
                if (arr.indexOf(arr[i]) != i) {
                    arr[i] = arr[arr.length - 1];
                    arr.length--;
                    i--;
                }
            }
            return arr;
        }
        console.log(filter(arr));

        let end = new Date().getTime()
        console.log('耗时', end - start);     //耗时6049

在这里插入图片描述
第四种方法:对象法, 利用对象没有这个属性时为undefined — 耗时11ms !!!

        let arr1 = Array.from(new Array(100000), (x, index) => {
            return index;
        })

        let arr2 = Array.from(new Array(50000), (x, index) => {
            return index + index;
        })

        let arr = arr1.concat(arr2);

        let start = new Date().getTime();
        console.log('开始数组去重');

        function filter(arr) {
            let obj = {};
            let newarr = [];
            for (let i = 0; i <= arr.length - 1; i++) {
                if (obj[arr[i]] == undefined) {
                    newarr.push(arr[i]);
                    obj[arr[i]] = 1;
                }
            }
            return newarr;
        }
        console.log(filter(arr));

        let end = new Date().getTime()
        console.log('耗时', end - start);     //耗时11

在这里插入图片描述
第五种:排序,相邻数值不相等则放到新数组 — 耗时11ms!!!

        let arr1 = Array.from(new Array(100000), (x, index) => {
            return index;
        })

        let arr2 = Array.from(new Array(50000), (x, index) => {
            return index + index;
        })

        let arr = arr1.concat(arr2);

        let start = new Date().getTime();
        console.log('开始数组去重');

        function filter(arr) {
            let obj = {};
            let newarr = [];
            for (let i = 0; i <= arr.length - 1; i++) {
                if (obj[arr[i]] == undefined) {
                    newarr.push(arr[i]);
                    obj[arr[i]] = 1;
                }
            }
            return newarr;
        }
        console.log(filter(arr));

        let end = new Date().getTime()
        console.log('耗时', end - start);     //耗时11

在这里插入图片描述
第六种:Set是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。— 耗时14ms!!!

        let arr1 = Array.from(new Array(100000), (x, index) => {
            return index;
        })

        let arr2 = Array.from(new Array(50000), (x, index) => {
            return index + index;
        })

        let arr = arr1.concat(arr2);

        let start = new Date().getTime();
        console.log('开始数组去重');

        function filter(arr) {
            return [...new Set(arr)];
        }
        console.log(filter(arr));

        let end = new Date().getTime()
        console.log('耗时', end - start);     //耗时14

在这里插入图片描述

Symantec System Recovery 2013 R2 可为 Windows 服务器提供出色的备份和灾难恢复功能,使企业在几分钟内即可从停机或灾难中恢复。 借助获得专利的 Restore Anyware™ 技术,IT 管理员可随时随地,迅速而准确地将所需内容恢复到裸机或不同硬件,包括全部物理机和虚拟机以及文件、文件夹和全面恢复应用程序对象。 与其他技术不同的是,Symantec System Recovery 还可提供跨平台物理到虚拟 (P2V) 及虚拟到虚拟 (V2V) 恢复,使之成为物理和虚拟环境的完美补充。灾难恢复领域的金牌标准 Symantec System Recovery 中文版灾难恢复领域的金牌标准 Symantec System Recovery 中文版Symantec System Recovery 2013 R2 主要功能支持 Microsoft Windows 8.1 和 Windows Server 2012 R2在几分钟内即可从本地或异地目标位置恢复物理和虚拟服务器,甚至可恢复到裸机、不同硬件、远程位置或虚拟环境在数秒内恢复文件、文件夹和全面恢复对象可以将备份异地复制到 FTP 位置或二级磁盘驱动器,从而增强灾难恢复能力可自动执行物理到虚拟 (P2V) 的无缝转换通过基于映像的技术,在一个易于管理的恢复点中捕获和保护整个系统, 包括操作系统、应用程序、所有文件和设备驱动程序等安排服务器备份自动运行,包括事件触发的备份,而不影响用户的工作效率内置 AES 加密可确保关键业务数据在传输过程中和静止状态下的安全性备份到几乎任何磁盘存储设备上,无提供商限制集中式管理和企业级伸缩性Symantec System Recovery 2013 R2 主要优势在发生系统故障的情况下,最大限度减少停机时间,大大避免收入和员工工作效率下降通过只需执行四个简单步骤的快速自动化系统恢复功能满足严格的恢复时间目标要求几分钟内即可随时随地恢复所需的内容,包括单个文件、文件夹或整个系统避免为执行恢复而准备相同硬件,从而降低了硬件成本轻松执行硬件更换和迁移通过 Symantec System Recovery Management Solution 或 Symantec System Recovery Monitor Solution(免费提供)集中管理整个企业内多台服务器的备份和恢复任务,从而简化 IT 管理采用集成式数据精简技术,降低存储成本,缩短备份时间,减少网络通信。操作系统Windows 32 位或 64 位操作系统,包括 64 位 BIOS 和 UEFI 服务器:Windows Server 2003Windows Small Business Server 2008 和 2011Windows Server 2008 SP1/SP2Windows Server 2008 R2 SP1Windows Server 2012Windows Server 2012 R2虚拟平台(用于转换的恢复点)VMware vSphere 4.0、4.1、5.0、5.1 和 5.5Microsoft Hyper-V 1.0、2.0 和 3.0Citrix XenServer 5.0、5.5、5.6 FP1、6.0、6.1 和 6.2内存下面为 Symantec System Recovery 各组件的内存要求:Symantec System Recovery 代理:1 GBSymantec System Recovery 用户界面和 Recovery Point 浏览器:1 GBSymantec System Recovery 磁盘:至少 1.5 GB(专用)LightsOut Restore 功能:1.5 GB可用硬盘空间Symantec System Recovery 和其他方面的硬盘要求:安装整个产品时:完整安装最多需要 2 GB 的空间,具体视所选产品的语言而定。恢复点:在本地硬盘或网络服务器上应有足够的硬盘空间来存储恢复点. 恢复点的大小取决于备份的数据量和存储的恢复点类型。LightsOut Restore:2 GBDVD-ROM 驱动器驱动器速度方面没有要求,但是该驱动器必须能够在 BIOS 中作为启动驱动器使用。Symantec System Recovery 采用了 Gear Software 技术。 要验证 DVD 刻录机的兼容性,请访问 Gear Software 网站。如果您知道刻录机制造商的名称和型号,可以查找有关此刻录机的信息。软件必须具备以下版本的 Microsoft .Net Framework
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值