博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数组去重的几种方式
阅读量:6512 次
发布时间:2019-06-24

本文共 945 字,大约阅读时间需要 3 分钟。

1、数组去重的几种方式()

方法1:使用Set + Array

function uniqueArray(arr){    return Array.from(new Set(arr));}复制代码

优点:代码简洁,速度快,时间复杂度为O(N)

缺点:需要一个额外的Set和Array的存储空间,空间复杂度为O(N)

方法2:使用splice

function uniqueArray(arr){    for(var i = 0; i < arr.length - 1; i++){        for(var j = i + 1; j < arr.length; j++){            if(arr[j] === arr[i]){                arr.splice(j--, 1);            }        }    }    return arr;}复制代码

优点:不需要使用额外的存储空间,空间复杂度为O(1)

缺点:需要频繁的内存移动,双重循环,时间复杂度为O(N2)

方法3:只用Array

function uniqueArray(arr){    var retArray = [];    for(var i = 0; i < arr.length; i++){        if(retArray.indexOf(arr[i]) < 0){            retArray.push(arr[i]);        }    }    return retArray;}复制代码

时间复杂度为O(N2),空间复杂度为O(N)

方法4:使用Object + Array

和方法三的区别在于,它不再是使用Array.indexOf判断是否已存在,而是使用Object[key]进行哈希查找,所以它的时间复杂度为O(N),空间复杂为O(N).

总结:Object + Array最省时间,splice的方式最耗时(它比较省空间),Set + Array的简洁方式在数据量大的时候时间将明显少于需要O(N2)的Array,同样是O(N2)的splice和Array,Array的时间要小于经常内存移动操作的splice。

转载地址:http://lwcfo.baihongyu.com/

你可能感兴趣的文章