在论坛上看到了有关于数组去重的问题,思考了一下相出了第一种方法
var arr=[1,2,3,4,5,1,2,3,4,6,7];
var newArr=[];
for(var i=0;i<arr.length;i++){
//通过indexof方法检索arr中的值,indexof方法在不到相同的值时会返回-1
if(newArr.indexof(arr[i])==-1){
newArr.push(arr[i]);
}
}
//将方法抽象
function getNewArr(a){
var newArr=[];
for(var i=0;i<a.length;i++){
if(newArr.indexOf(a[i])==-1){
newArr.push(a[i]);
}
}
return newArr;
}
var arr=[1,2,3,4,5,1,2,3,4,6,7];
getNewArr(arr);
后来朋友告诉我可以用哈希表做,我还特意去百度了哈希表是个什么东西;得到了下面的代码
function getNewArr(a){
var newArr={};
var result=[];
var len=a.length;
for(var i=0;i<len;i++){
if(!newArr[a[i]]){
newArr[a[i]]=true;
result.push(a[i]);
}
}
return result;
}
var arr=[1,2,3,4,3,2,5];
console.log(getNewArr(arr))//1,2,3,4,5;
- 开始 i=0;a[i]=1 newArr={} result=[] newArr[a[i]]是不存在的,所以!newArr[a[i]]会走if中间的代码;
- 然后i=1;a[i]=2 newArr={1:true} result=[1] newArr[2]也是不存在的,所以 也会走if的代码,
- 直到i=4;a[i]=3newArr={1:true,2:true,3:true,4:true},newArr[3]=true;这个值存在了,就不会走if中的代码,所以第二个3就被忽略了得到的result就是[1:true,2:true,3:true,4:true]所以可以达到去掉重复数组的效果;
实不相瞒,ES6给出了一个更简单的方法;使用 Set 以及 Array.from 方法去重,实测只要一行代码
function unique(a) {
return Array.from(new Set(a));
}
Set()方法是一组key值的集合,他并不会存储value值,当你的key值重复了他就自动帮你过滤了,可以达到数组去重