数组去重,主要思路是循环遍历这个数组里的每一个数据,然后再定义一个新数组,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方法转换为真数组即可;
入行不久,能想到的就这些,还有其他方法的,欢迎跟我探讨!!