数组去重性能

作者: 土豪码农 | 来源:发表于2019-02-14 22:29 被阅读0次

今天看到一篇文章,哇,超赞的,测试一下数组去重的性能.

测试模板

// distinct.js

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

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

    let arr3 = arr1.concat(arr2);

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

    function distinct(array) {
        // 数组去重
        var newArr = []; //一个新的临时数组
        for(var i = 0; i < array.length; i++){
            if(newArr.indexOf(array[i]) === -1){
                newArr.push(array[i]);
            }
        }
        return newArr;
    }

    console.log('去重后的长度', distinct(arr3).length);

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

然后就把自己知道的一些去重方法丢进去,就知道自己平时使用的数组去重的方法性能到底如何了.

先试试最常见的利用一层for循环遍历加indexOf

// 数组去重
        var newArr = []; //一个新的临时数组
        for(var i = 0; i < array.length; i++){
            if(newArr.indexOf(array[i]) === -1){
                newArr.push(array[i]);
            }
        }
        return newArr;
image.png

明显卡成狗了,一共才150000个数据

再来试试es6最简便的方法

Array.from(new Set(array))
image.png

这快的有点夸张了

解构赋值结合再试试

[...new Set(array)]
image.png

又快了一点。

试一下先排序再去重

    array.sort();
        const newArr = [array[0]];
        for (let i = 1; i < array.length; i++) {
            if (array[i] !== newArr[newArr.length - 1]) {
                newArr.push(array[i]);
            }
        }
        return newArr;
image.png

也还可以

利用对象属性唯一实现数组去重,这个是我之前想到的一个方法

const obj = {}, newArr = [];
        for (let i = 0; i < array.length; i++) {
            if(!obj[array[i]]){
                obj[array[i]] = 1;
                newArr.push(array[i]);
            }
        }
        return newArr
image.png

结果让我非常惊讶,速度飞快,但是比较有局限性,之前想到这个办法就是觉得利用对象的键值对去代替indexOf或者循环会更加快,今天试了下,果然如此.但是后来发现这个方法有一定的局限性,因为object的属性会把所有类型的变量都转化为string类型的,也就是1和'1'是会被替换掉的,类似这些都会出现问题.

文章参考自 # JavaScript 高性能数组去重

相关文章

  • 数组去重性能

    今天看到一篇文章,哇,超赞的,测试一下数组去重的性能. 测试模板 然后就把自己知道的一些去重方法丢进去,就知道自己...

  • 高性能数组去重

    https://www.cnblogs.com/wisewrong/p/9642264.html 调整改造一下,基...

  • JavaScript 高性能数组去重

    一、测试模版 数组去重是一个老生常谈的问题,网上流传着有各种各样的解法为了测试这些解法的性能,我写了一个测试模版,...

  • 嵌套数组扁平化和数组去重性能检测

    前言: 常规的数组扁平化的写法以及常见的面试中数组去重的几种写法,顺便记录一下数组去重的性能分析,特别是面对大量数...

  • Array集结号

    实现数组去重的几种方法 数组去重一 数组去重二 利用数组indexof+push实现数组去重 数组去重三 利用对象...

  • 实现数组去重有哪些方式

    简单的数组去重 数组对象去重

  • 数组去重的四种方法

    利用双for循环去重 利用对象数组去重 利用对象数组去重并且记录重复次数 通过创建一个新数组进行数组去重

  • js数组去重、对象数组去重

    普通数组去重 一、普通数组去重 方法一:遍历数组法 方法二:排序法 方法三:对象法 对象数组去重 方法一:将对象数...

  • javascript数组去重,数组对象去重

    利用Reduce去重 function unique(arr) {var obj = {};arr = arr.r...

  • js:数组去重

    数组去重的常见写法: 数组去重封装成方法: es6的数组去重(Array.from):

网友评论

    本文标题:数组去重性能

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