JavaScript数组去重的4种实现方式

作者:青柠

时间:2026-10-22

浏览:457

本文介绍了JavaScript中实现数组去重的四种常用方法:通过双重循环比较并移除重复项、利用新数组结合indexOf判断、借助对象记录元素出现次数,以及先排序再去除相邻重复元素。每种方法均附有完整代码示例,帮助开发者根据实际需求选择合适的去重方案。

文章目录

双重循环去重法

第一种方法采用双重循环机制。外层循环遍历数组中的每个元素,内层循环从当前元素的下一个位置开始向后查找。一旦发现重复元素,立即使用splice方法将其移除,并调整索引以避免跳过后续元素。这种方法直接修改原数组,无需额外空间存储新数组,但时间复杂度较高,为O(n^2)。


var ary=[1,2,3,3,2,3,4,5];
for(var i=0;i<ary.length;i++){
  for(var j=i+1;j<ary.length;j++){
    if(ary[i]===ary[j]){
      ary.splice(i,1);
      i--;
    }
  }
}
alert(ary);

新数组结合indexOf法

第二种方法通过创建新数组来实现去重。遍历原数组,利用indexOf方法检查当前元素是否已存在于新数组中。若不存在(indexOf返回-1),则将该元素推入新数组。此方法保留了原数组不变,代码简洁易懂,但同样存在时间复杂度为O(n^2)的性能瓶颈,适用于小规模数据。


var ary=[1,2,3,3,2,3,4,5];
var ary1=[];
for(var i=0;i<ary.length;i++){
 if(ary1.indexOf(ary[i])==-1){
 ary1.push(ary[i]);
 }
}
alert(ary1);

对象记录频次法

第三种方法利用对象属性来记录元素出现次数。首先遍历原数组,将每个元素作为对象的键,值为其出现的次数。若元素已存在,则计数加一;否则初始化为1。随后遍历对象的所有键,将这些键(即去重后的元素)推入新数组。这种方法能同时统计元素频次,但对象键默认转为字符串,可能导致数字与字符串混淆,需注意类型一致性。


var ary=[1,2,3,3,2,3,4,5];
 var obj={};
 for(var i=0;i<ary.length;i++){
  var cur=ary[i];
  if(obj[cur]){
  obj[cur]++;
  }else{
  obj[cur]=1;
  }
 }
 var ary=[];
 for(var attr in obj){
  ary.push(attr);
 }
 alert(ary);

排序后相邻去重法

第四种方法基于排序思想。首先对数组进行升序排序,使得相同元素相邻。然后遍历排序后的数组,比较当前元素与下一个元素是否相等。若相等,则使用splice移除当前元素,并调整索引。排序后去重通常比前几种方法效率更高,尤其适合大规模数据,但排序操作本身的时间复杂度为O(n log n),且会改变原数组顺序。


var ary=[1,2,3,3,2,3,4,5];
 ary.sort(function(a,b){return a-b;});
 for(var i=0;i<ary.length;i++){
  if(ary[i]===ary[i+1]){
  ary.splice(i,1);
  i--;
  }
 }
 alert(ary);

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持本站!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章