数组去重方法整理

本文介绍了三种去除数组中重复元素的方法:for循环法,通过遍历数组并比较元素来创建新数组;hash数组法,利用对象的属性不存在则返回undefined的特性,将元素作为新数组的下标;以及在不改变原数组的基础上进行操作的方法,通过检查已遍历的元素避免重复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组去重方法整理


数组去重看似一个简单的问题,随着我们的学习,对于新知识的掌握这个曾经困着我们的问题逐渐变得游刃有余。要去重,中心解决办法就是比较该数组中是否重复的元素,而后将重复的元素去掉。以下带来几个楼主折磨自己中研究出的一点方法~~

方法一

for循环法~~
思路:将数组中的每一个数与数组中其他的数进行比较,看是否有相同的。如果没有相同的那么该数即直接放到新数组里。新的数组中就是无重复的数组。

实例:
function solution1(){
   		var arr = [1,1,1,3,4,3,4,6,8,3,1,2];
   		var res = [];
   		for(var i = 0; i < arr.length; i ++){              // 第一层for用来控制循环的次数
   			for(var j = 0; j < i; j++){          //第二层for 用于控制与第一层比较的元素
   				if(res[j] == arr[i])
   					break;
   			}
   			//注:关键:没有吧后面的IF放入循环,所以第一次会循环进if(res.length == j),让res有一个初始的值。
   			if(res.length == j)                     //这个的思路比较巧妙,意思是:当该数比较到最后一位都没有数与它相等,那么直接可以表明这个数在该数组中没有重复的,可以直接输出。res[res.length] = arr[i];
   		}
   		document.writeln( res);
   	}
   	solution1();

方法二

hash数组法~hash数组法即用原数组中的元素作为新数组的下标。如果hash数组(或者理解为对象)里没有这个属性的话(即:该数组的项没有被定义)就会返回undefined。 利用这个原理,当返回的是undefined时 ,把这个元素放入数组中, 然后在给这个属性赋值

function fun2() {
   		var arr = [1,1,1,3,4,3,4,6,8,3,1,2];
   		document.writeln(arr + "<br>" );
   		for(var i = 0, hash = [], res = []; i < arr.length; i++){
   			if(hash[arr[i]] === undefined){        //如果hash数组(或者理解为对象)里没有这个属性的话(即:该数组的项没有被定义)就会返回undefined。
   				res[res.length] = arr[i];               //将这个不重复的元素添加到新数组中。
   				hash[arr[i]] = true;
   			}
   		}
   		document.writeln( res + "<br>");
   	}
   	fun2();

方法三

当然有朋友就会问了,之前的都是以生成新的数组来避开对原数组的更改。如果想在原数组上怎么办?
这里用方法1引申一下。具体如下所示:

 function fun3() {          
	    	 var arr = [1,1,1,3,4,3,4,6,8,3,1,2];
  	        for(var i=0; i<arr.length; i++){            // for用来控制循环的次数   
            for(var j=i+1; j<arr.length; j++){      //第二层for 用于控制与第一层比较的元素
             if(arr[i] == arr[j]){                 //如果想相等的元素,就删除后面的那个元素 即(即arr[j] 这个元素)
                    arr.splice(j,1);
                     j--;                         // j--很关键!!!因为每次使用splice删除元素时,原数组改变,后面的元素下标会发生改变。比如删除了原本的第二位,那么原本的第三位就变成新的第二位了。这意味这数组下次遍历是 比较市跳过了一个元素。所以,做J--来保证纵然是那出了之后仍然会与每一个数进行比较~~
							 	   }
 											  }
									        }
 
     document.writeln(arr);
    }

若要在方法二上使用也是一样的道理!J - -至关重要!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值