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

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

js数组去重也是老生常谈的话题了,怎么驱虫涅,最容易想到的就是直接新建一个数组,存放去重后的数组。由于NaN这种神奇的数字连他自己都不认识自己,所以目标数组如果需要去重NaN,需要用isNaN来判断一下,ok,码归正传,代码如下:

function unique01(arr){    if(Array.isArray(arr)){        var result = [];        var flag = true;        for(var i=0;i

这种方法虽然实现上没太大难度,缺点确实很明显,一是不够快,时间复杂度O(n)2。二是费空间,需要新开一个数组来存放结果。

怎么才能不费空间呢,直接在原数组上操作,最后返回这个数组,嗯,思路有了,就看如何实现了,继续放码..

function unique02(arr){    if(Array.isArray(arr)){        var flag = true;        for(var i=arr.length-1;i>0;i--){            if(isNaN(arr[i])){                flag = false;            }            for(var j=0;j

仔细看看,这个操作还是有点水平的,虽然时间复杂度依然是O(n)2,起码空间不浪费了,当然,我们的目标不会止步于此的

function unique03(arr){    if(Array.isArray(arr)){        var result=[],obj={},val,type;        for(var i=0;i

是不是更6了,没错,这次我们把时间复杂度降到了O(n),不过有点遗憾的是空间浪费的有点多,用空间的代价换取时间。究竟值不值呢,你说了算。

当然,没有最6,只有更6,ES6中的代码其实这样写

function unique04(arr) {    return Array.from(new Set(arr))}

是的,你没有看错,只有一行,一行代码,搞定一切,就是这个feel。

 

转载于:https://www.cnblogs.com/renbo/p/8799098.html

你可能感兴趣的文章