数组去重

数组去重,主要思路是循环遍历这个数组里的每一个数据,然后再定义一个新数组,if条件判断不重复的再往新数组里添加,最后返回新数组即可去重。这个问题思路差不多,但实现方法可以不同,话不多说,直接上代码:
方法一:是比较原生的的写法
function has(arr,n) { var flag = false; for(var i=0; i<arr.length;i++) { if(arr[i] == n) { flag = true; break; } } return flag; } function norepeat(arr) { var newArr = []; for(var i=0; i<arr.length; i++) { if(!has(newArr,arr[i])) { newArr.push(arr[i]); } } return newArr; }

方法二:
function norepeat(arr) {
	var newArr = arr.filter(function(val,index,self) {
		return self.indexOf(val) === index;
		
    }) return newArr;
}
方法三:
function norepeat(arr) {
	var newArr = [];
	for(var i=0; i<arr.length; i++) {
		if(arr.indexOf(arr[i]) === i) {
			newArr.push(arr[i]);
		}
	}
	return newArr;
}
这两个方法的思路主要是利用indexOf总是返回第一个元素的位置,后续的重复元素位置与indexOf返回的位置不相等作判断条件,因为数组里有许多API,所以实现方式有多种。其实还有forEach也行:
function norepeat(arr) {
	var newArr = [];
	arr.forEach(function(val,key) {
		if(arr.indexOf(val) === key) {
			newArr.push(val);
		}
	})
	return newArr;
}

再其实,上面那段代码只要把forEach方法换成map方法,效果一模一样;
function norepeat(arr) {
	var newArr = [];
	arr.map(function(val,key) {
		if(arr.indexOf(val) === key) {
			newArr.push(val);
		}
	})
	return newArr;
}

//怎么感觉在练习怎么循环遍历数组啦~~

方法四:哈哈!!这是最高级的哦,两行代码就搞定啦啦啦!!!
function norepeat(array) {
  return Array.from(new Set(array));
}
set是一个集合,里面的值都是独一无二的,值传入里面就自动带有去重功能,它是一个伪数组,最后通过Array.from方法转换为真数组即可;
入行不久,能想到的就这些,还有其他方法的,欢迎跟我探讨!!






原文地址:https://www.cnblogs.com/sophia0102/p/9043705.html