js数组去重方法是什么

js数组去重方法是什么
最新回答
听说网名太长会被狗咬

2022-10-08 14:25:00

JavaScript数组去重有以下几种常见方法

遍历数组法
利用indexOf()方法判断元素是否已存在于新数组中。具体步骤为:创建空数组newArr,遍历原数组arr,若newArr.indexOf(arr[i]) === -1(即未找到重复元素),则将arr[i]推入newArr。此方法简单直观,但时间复杂度为O(n²),适用于小规模数据。

数组下标判断法
通过比较元素首次出现的索引与当前索引实现去重。遍历数组时,若arr.indexOf(arr[i]) === i(即当前元素为首次出现),则将其推入新数组。此方法利用了indexOf()返回首个匹配索引的特性,重复元素会被跳过,时间复杂度同样为O(n²)。

排序后相邻去除法
先对数组排序(sort()),使重复元素相邻,再遍历比较相邻元素。初始化新数组为[arr[0]],从第二个元素开始遍历,若当前元素与新数组末尾元素不等,则推入新数组。此方法时间复杂度为O(n log n)(排序主导),但会改变原数组顺序。

优化的遍历数组法
采用双重循环:外层循环遍历原数组,内层循环从当前元素开始向后比较。若未发现重复,则将当前元素推入新数组;若发现重复,则跳过后续比较。此方法通过提前终止内层循环优化性能,但仍为O(n²)时间复杂度。

数组遍历法(状态变量控制)
使用双重循环与状态变量bl控制去重。外层循环遍历原数组,内层循环遍历新数组,若新数组中不存在当前元素(bl保持true),则推入新数组;若存在(bl置为false),则跳过。此方法逻辑清晰,但效率与前两种双重循环方法相当。

其他高效方法补充

  • ES6 Set方法:利用Set数据结构自动去重的特性,将数组转为Set再转回数组,代码简洁([...new Set(arr)]),时间复杂度为O(n)。
  • 对象键值法:通过对象属性唯一性去重,遍历数组时以元素为键存储,最后提取对象键名转为数组。此方法需处理对象键名类型限制,但效率较高。

选择建议

  • 小规模数据或兼容性要求高时,可选传统方法(如遍历数组法)。
  • 追求简洁与性能时,优先使用Set或对象键值法。
  • 需保留原始顺序时,避免排序后相邻去除法。