欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数组去重的方式练习

程序员文章站 2024-03-22 19:47:40
...

数组去重

方法一

思路:使用indexOf判断新数组是否存在指定的值,不存在就添加,存在就跳过。返回新数组不改变原数组

			var arr2 =[1,5,6,3,2,4,1,5,6,3,2,4,8,9,5,4,22,55,41,23,64];
			function delArrRepeat1(arr){
				var newArr = [];  //定义一个空数组
				for(var i = 0;i<arr.length;i++){
					if(newArr.indexOf(arr[i]) == -1){ // 如果空数组内没有,就添加
						newArr.push(arr[i]);  
					}
				}
				return newArr; //返回新数组
			}
			console.log(delArrRepeat1(arr2))

结果:[1, 5, 6, 3, 2, 4, 8, 9, 22, 55, 41, 23, 64] 会对应原来数组格式

方式二

思路:先给数组排序,用当前值和下一个值比较,如果不等就加入新数组,返回新数组不改变原数组

			var arr2 =[1,5,6,3,2,4,1,5,6,3,2,4,8,9,5,4,22,55,41,23,64];
			function delArrRepeat2(arr){
				// 从小到大排序
				arr.sort((a,b)=>{return a-b});
				var newArr = [];
				for(var i = 0;i<arr.length;i++){
					if(arr[i] !== arr[i+1]){//比较当前和下一个是否相等
						newArr.push(arr[i]);
					}
				}
				return newArr;
			}
			console.log(delArrRepeat2(arr2));

结果:[1, 2, 3, 4, 5, 6, 8, 9, 22, 23, 41, 55, 64] 结果会有排序

方式三

思路:数组每个元素和所有除自生以外的元素进行比较,如果有相同的就删除掉。会改变原数组。

			var arr2 =[1,5,6,3,2,4,1,5,6,3,2,4,8,9,5,4,22,55,41,23,64];
			function delArrRepeat3(arr){
			// 每一个元素和所有元素比较一次
				for(var i = 0;i<arr.length;i++){// i表示当前是第几个和所有的比较
					for(var j = 0;j<arr.length;j++){ 
						if(j !== i && arr[i] === arr[j]){ //条件 不和当前比较,并且有全等的就删除掉
							arr.splice(j,1);
						}
					}
				}
				return arr; // 返回原数组
			}
			console.log(delArrRepeat3(arr2));

结果:[1, 5, 6, 3, 2, 4, 8, 9, 22, 55, 41, 23, 64] 会对应原来数组格式

方式四

思路:通过计数,把元素当作下标放在一个新数组里面,通过 for in 来遍历,将新数组下标添加到一个数组里面返回新数组。

			var arr2 =[1,5,6,3,2,4,1,5,6,3,2,4,8,9,5,4,22,55,41,23,64];
			function duplicateRemoval(arr){
				var newArray = [],arrs = [];
				//把元素当作下标记录,该元素在数组中出现的次数(主要是把元素当作下标)
				for(var i = 0;i<arr.length;i++){
					newArray[arr[i]] === undefined ? newArray[arr[i]] = 1 : newArray[arr[i]]++;
				}
				for(var i in newArray){arrs.push(i-0);}// 使用 for in 把下标加入到新数组 arrs 中。
				return arrs;
			}
		 	 console.log(duplicateRemoval(arr2));

结果:[1, 2, 3, 4, 5, 6, 8, 9, 22, 23, 41, 55, 64] 会有排序

处理混合数组

比如:var arr2 =[1,5,6,3,2,4,1,5,6,3,2,4,8,9,5,4,22,55,41,23,64,1,'ss','ss',true,true,1,1,{},{},NaN,NaN];

方式二、方式四:主要处理数字类型的数组,处理混合数组会有问题。
方式一、方式三:数字类型混合类型数组;

千万不要问后面的对象和NaN为什么去不掉!!!