admin 管理员组

文章数量: 887629


2024年1月12日发(作者:二郎山好玩吗)

JS数组去重的方法及原理(全)

JavaScript中数组去重的方法有多种,可以分为传统方法和现代方法。

传统方法:

1. 使用双层循环:外层循环遍历数组的每个元素,内层循环从外层循环的当前元素开始,往后遍历,如果找到相同的元素,则使用splice(方法删除该元素。这种方法的缺点是效率较低,时间复杂度为O(n^2)。

```javascript

function unique(arr)

for(let i=0; i<; i++)

for(let j=i+1; j<; j++)

if(arr[i] === arr[j])

(j, 1);

j--;

}

}

}

return arr;

```

2. 使用indexOf(方法:遍历数组的每个元素,使用indexOf(方法判断该元素是否已经存在于一个新的数组中,如果不存在,则将该元素添加到新数组中。这种方法的时间复杂度依然为O(n^2)。

```javascript

function unique(arr)

let result = [];

for(let i=0; i<; i++)

if(f(arr[i]) === -1)

(arr[i]);

}

}

return result;

```

3. 使用includes(方法:与indexOf(方法类似,遍历数组的每个元素,使用includes(方法判断该元素是否已经存在于一个新的数组中,如果不存在,则将该元素添加到新数组中。这种方法与indexOf(方法相比,不需要返回索引值,所以效率稍高一些,时间复杂度仍为O(n^2)。

```javascript

function unique(arr)

let result = [];

for(let i=0; i<; i++)

if(!es(arr[i]))

(arr[i]);

}

}

return result;

```

现代方法:

4. 使用Set:ES6中引入了Set数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。我们可以通过将数组转换为Set来实现数组去重。

```javascript

function unique(arr)

return (new Set(arr));

```

或者使用扩展运算符(...):

```javascript

function unique(arr)

return [...new Set(arr)];

```

5. 使用Map:通过Map数据结构也可以实现数组去重的效果。遍历数组的每个元素,将元素作为键和值存储到Map中,由于Map中不允许重复的键,所以重复元素自然会被去重。

```javascript

function unique(arr)

let map = new Map(;

let result = [];

for(let i=0; i<; i++)if(!(arr[i]))

(arr[i], true);

(arr[i]);

}

}

return result;

```

以上是常用的一些数组去重的方法,其中现代方法使用据结构可以更简洁高效地实现数组去重,时间复杂度为Set或Map数O(n)。


本文标签: 方法 元素 数组