在笔试中很大概率会出现的一类题,去除数组里面的重复值。方法有很多,本人整理了3种最基本的方法。
1:利用双循环完成
/**
* @returns 返回一个新的数组
* @param {Array} arr 接收一个数组
*/
function method1(arr){
var newarr = []; //创建一个数组用来存储
for(var i = 0; i < arr.length; i++){ //遍历我们传入的数组,得到其中的数据
var isone = true; //默认这个数据是第一次出现
for(var j = 0; j < newarr.length; j++){ //遍历存储数组,得到其中的数据
if(newarr[j] == arr[i]){ //如果为真,则说明存储数组中已经有了这个数,并将isone赋值为false;为假则不改变
isone = false;
}
}
if(isone){ //如果为真,则将这个数存储在新的数组中
newarr[newarr.length] = arr[i];
}
}
return newarr;
}
2:利用数组的api——indexOf来完成
function method2(arr){
var newarr = [];
for(var i = 0; i < arr.length; i++){
if(newarr.indexOf(arr[i]) == -1){ //在newarr数组中查找是否存在arr[i],如果不存在则返回-1;如果存在则返回arr[i]在newarr数组中的下标。
newarr[newarr.length] = arr[i]; //将值赋予newarr数组。
}
}
return newarr;
}
3:利用对象的属性名不能重复的特点来完成去除重复值
function method3(arr){
var newarr = [];
var hash = {}; //利用对象的属性名不能重复来进行判断,看是否重复
for(var i = 0; i < arr.length; i++){
if(hash[arr[i]] === undefined){ //如果hash对象中以arr[i]这个值作为属性名的属性值是undefined
newarr[newarr.length] = arr[i]; //将arr[i]这个值添加到newarr数组中
hash[arr[i]] = '已经出现过一次了'; //给hash对象添加成员,属性名为arr[i];属性值赋值为一个统一值
}
}
return newarr;
}
总结:去重的方法很多,笔试题中也经常出现,熟练的掌握三种以上的方法是很有必要的。