JavaScript数组去重的五种实现方案与性能分析

作者:小括号

时间:2026-10-30

浏览:396

本文详细解析了JavaScript中数组去重的五种常见实现方式,包括基于splice删除、双重循环判断、索引重置、独立数组比对以及对象属性标记法。通过对比各方法的逻辑复杂度与执行效率,帮助开发者根据实际场景选择最优方案,并附带完整代码示例供参考。

文章目录

JavaScript数组去重概述

在JavaScript开发中,去除数组中的重复元素是一项基础且高频的操作。本文主要聚焦于同类型数据的去重场景,旨在梳理不同的实现思路并探讨其性能表现。以下介绍的方法在技术社区中较为常见,此处主要进行归纳总结。

数组去重的核心思路

实现思路概述:

1. 遍历数组进行两两比较,若发现相同元素,则删除其后方的重复项。 2. 遍历数组进行比较,遇到相同元素时跳过前面的重复项,仅将不同的元素放入新数组。 3. 随机选取一个数组元素放入新数组,随后遍历剩余元素,将其与新数组中的元素逐一比对,若存在不同则加入新数组。 4. 遍历原数组,将元素作为对象的属性键进行判断,利用属性是否存在来过滤重复值。

方法一:删除后续重复元素

第一种方法:删除后续重复元素


function ov1(arr){
  //var a1=((new Date).getTime())
  for(var i=0;i<arr.length;i++)
    for(var j=i+1;j<arr.length;j++)
      if(arr[i]===arr[j]){arr.splice(j,1);j--;}      
  //console.info((new Date).getTime()-a1)        
  return arr.sort(function(a,b){return a-b});
}

方法二:常规双重循环判断

第二种方法是较为常规的解法,逻辑直观易懂。其核心在于当检测到相同元素时,通过跳出内层循环来避免重复添加。


function ov2(a) {
  //var a1=((new Date).getTime())
  var b = [], n = a.length, i, j;
  for (i = 0; i < n; i++) {
    for (j = i + 1; j < n; j++)
      if (a[i] === a[j]){j=false;break;}
    if(j)b.push(a[i]);
    }
  //console.info((new Date).getTime()-a1)  
  return b.sort(function(a,b){return a-b});
} 

方法三:索引重置与元素提取

第三种方法逻辑相对复杂,需要仔细理解循环变量的变化。虽然j循环仍在继续,但i的值在检测到重复时发生了改变,这实际上等效于开启了一个新的i循环逻辑。


function ov3(a) {
  //var a1=((new Date).getTime())
  var b = [], n = a.length, i, j;
  for (i = 0; i < n; i++) {
    for (j = i + 1; j < n; j++)
    if (a[i] === a[j])j=++i
  b.push(a[i]);}
  //console.info((new Date).getTime()-a1)  
  return b.sort(function(a,b){return a-b});
}   

方法四:独立数组比对法

第四种方法的核心目标是确保新数组中存储的所有元素均为唯一值。


function ov4(ar){
//var a1=((new Date).getTime())
  var m=[],f;
  for(var i=0;i<ar.length;i++){
  f=true; 
  for(var j=0;j<m.length;j++)
  if(ar[i]===m[j]){f=false;break;};
  if(f)m.push(ar[i])}
//console.info((new Date).getTime()-a1)  
  return m.sort(function(a,b){return a-b});
}

方法五:对象属性标记法

第五种方法利用对象属性的唯一性来实现去重。


	function ov5(ar){
	//  var a1=(new Date).getTime()
			var m,n=[],o= {};
			for (var i=0;(m= ar[i])!==undefined;i++)
			if (!o[m]){n.push(m);o[m]=true;}
	//  console.info((new Date).getTime()-a1)  
		return n.sort(function(a,b){return a-b});;
		}

以上介绍了JavaScript中几种常见的数组去重方法,希望能为您提供有效的参考。如果您对本文内容有任何疑问或建议,欢迎继续交流探讨。

实用工具推荐

电子包浆

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

使用 ›
图片压缩

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

使用 ›
相关文章