数组去重,找出数组重复的元素,找出数组第一个不重复的

目录

一、数组去重

利用两个for循环和push方法

利用两个for循环和splice方法

利用sort和splice

利用对象属性的不重复性

利用indexOf和push

利用set对象和拓展运算符

二、找出数组重复的元素

利用利用indexOf和lastIndexOf

三、找出数组第一个不重复的元素

利用利用indexOf和lastIndexOf,for循环break(或者forEach try catch)


一、数组去重

利用两个for循环和push方法

思路:利用两个for循环.遍历数组中的每一项,对每一项又遍历这项后面的每一项。也就是将当前元素与他后面的所有元素作比较,只要碰到与当前元素相等的情况,利用j = ++i重新开始外层大循环。直到其后面没有重复的元素就push进新数组

	<script type="text/javascript">
		function distinct(arr){
			var result = [],
			 	  len = arr.length;
		  for(var i = 0; i < len; i++){
		    for(var j = i + 1; j < len; j++){
		    	if(arr[i] === arr[j]){
		    		j = ++i;//i和j分别加1,外层大循环重新开始
		   		}
		  	}
		  	result.push(arr[i]);
		  }
		 return result;
		}
		var arra = [1,2,3,4,4,1,1,2,1,1,1];
		console.log(distinct(arra));    //返回[3,4,2,1]
	</script>

利用两个for循环和splice方法

思路 对数组中的每一项,与该项后面的每一项比较,若相同,就删掉后面的相同项

	<script type="text/javascript">
		 function distinct(arr){
	 		var len = arr.length;
	 		for(var i = 0; i < len; i++){
	 			for(var j = i + 1; j < len; j++){
	   			if(arr[i] == arr[j]){
	   				 arr.splice(j,1);
	   				 len--;
	    			 j--;// 进行下一次遍历
	  			}
	  		}
	 		}
 			return arr;
		};
		var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
		var b = distinct(a);
		console.log(b); //1,2,3,4,5,6,56
	</script>

利用sort和splice

思路:先用sort方法将数组排序,然后在老数组中循环遍历,将当前项与他的后一项比较,如果相等就删除当前项,并且进行i--和len--继续遍历

	<script type="text/javascript">
		function distinct(arr) {
			var len=arr.length;
			arr.sort((a,b) => a - b ); // 对数组进行排序
			for(var i = 0;i < len;i ++ ){
				if(arr[i] == arr[i+1]){
					arr.splice(i,1); // 删掉当前项
					len--;
					i--;
				}
			}
			return arr;
		};
		var arra = [1,2,3,4,4,1,1,2,1];
		var b = distinct(arra);
		console.log(b); // [1,2,3,4]
	</script>

利用对象属性的不重复性

思路:利用对象的属性不能相同的特性.将数组中的每一项当做对象的属性名,属性名是不可以重复的。新建一个对象obj,遍历数组中的每一项,如果!obj[arr[i]]为true,就将该值push进结果数组

	<script type="text/javascript">
		function distinct(arr) {
			var i;
			var obj = {};
			var result = [];
			var len = arr.length;
			for(i = 0;i < len;i ++){
				if(!obj[arr[i]]){
					obj[arr[i]] = 1;//通过变量访问属性,用[]
					result.push(arr[i]);
				}
			}
			console.log(obj);
			return result;
		};
		var a = [1,4,6,4,4,4,4,4,6,1,1]
		var b = distinct(a);
		console.log(b); // [1,4,6]
	</script>

利用indexOf和push

思路:对于老数组中的每一项,在新数组中进行查找,如果没有(返回-1),push进去

	<script type="text/javascript">
		 function distinct(arr) {
			var i;
			var len = arr.length;
			var res = [];
			// for(i = 0;i < len;i ++){
			// 	if(res.indexOf(arr[i]) === -1){
			// 		res.push(arr[i]);
			// 	}
			// }
			// 可以用forEach(或者map\filter)代替上面的for循环,注意传入的函数的三个参数分别为item,index,array
			arr.forEach(function(item){
				if(res.indexOf(item) === -1){
					res.push(item);
				}
			})
			return res;
		};
		var arra = [1,2,4,2,1,24,4,3,4,2,1,3,3];
		var arrb = distinct(arra);
		console.log(arrb);
	</script>

利用set对象和拓展运算符

思路:ES6中的set是一个类似于数组的对象,其属性不能重复。利用Array.from或者拓展运算符将其转化为数组

	<script type="text/javascript">
		function distinct(array){
			// return Array.from(new Set(array));
			return [... new Set(array)]//用[...A]将A转换为数组
		}
		var arr1 = [2,1,2,2,1,34,3,5,54,221,1,1,2,3,12];
		var arr2 = distinct(arr1);
		console.log(arr2);
	</script>

二、找出数组重复的元素

  • 利用利用indexOf和lastIndexOf

思路:遍历每一项,新建res数组保存结果。利用indexOf和lastIndexOf,当两者不相等,并且res数组中没有这个元素的时候,说明这个元素第一次重复,push进结果数组

	<script type="text/javascript">
		function findRepeat(arr) {
			var res = [];
			arr.forEach(function(item) {
				if(arr.indexOf(item) !== arr.lastIndexOf(item) && res.indexOf(item) == -1) {
					res.push(item);
				}
			});
			return res;
		}
		var arr1 = [1,"1",2,1,3,2,3,3];
		console.log(findRepeat(arr1));// [1,2,3]
	</script>

三、找出数组第一个不重复的元素

  • 利用利用indexOf和lastIndexOf,for循环break(或者forEach try catch)

思路:遍历每一项,一旦发现indexOf和lastIndexOf相等,就可以跳出循环。如果用for遍历,可以用break跳出去。如果用forEach遍历,只能用try catch语句块跳出遍历。本程序用try catch

	<script type="text/javascript">
		function firstNoRepeat(arr) {
			var res = [];
			try{
				arr.forEach(function(item) {
					if(arr.indexOf(item) === arr.lastIndexOf(item)) {
						res.push(item);
						throw new Error("找到啦!");
					}
				});
			}catch(err){
			}
			return res; 
		}
		var arr2 = [1,"1",2,1,3,2,3,3];
		console.log(firstNoRepeat(arr2));// ["1"]		
	</script>

猜你喜欢

转载自blog.csdn.net/xuli1207516504/article/details/81505035