//生成一个有10000个随机数的数组
var arr = [];
for ( var i = 0;i < 10000; i++){
arr.push( parseInt( Math.random()*10000 ) )
}
方法一,传统,利用对象属性不重复,但速度慢
function unique( arr ){
var obj = {};
for(var n of arr){
obj[n] = 1;
}
var newArr = [];
for( var key in obj ){
newArr.push(parseInt(key));//字符串转为数值
}
//如果字符串类型的数组去重,可使用ES6 新特性
//new Arr = Object.keys(obj);
return newArr
}
unique1(arr);
方法二,使用ES6 新类型Set对象
- Set类型的对象:是值不允许重复的集合。
- 向Set类型的对象中添加新值时,如果Set中没有这个值,才能添加进去,自带过滤重复值功能
- 测试
var arr = [1,2,3,4,5,4,6]
var set = new Set(arr);//将数组转为值不重复的对象
console.log(set) //{1,2,3,4,5,6}
//使用扩展运算符,转为数组
console.log([...set]) //[1,2,3,4,5,6]
去重使用
function unique2(arr){
var set = new Set(arr);
var newArr = [...set];
return newArr
}
//或者
function unique2(arr){
return [...new Set(arr)];
}
unique2(arr);
- 数组的数值和字符串可以为数值或字符串,但不可并存,需要先转为数值,后使用Set**
var arr1=['1','2',3,4,'5',5,7,4,1,2,3,6,8]
var arr2=new Array;
for(n of arr1){
arr2.push(parseInt(n))
}
console.log([...new Set(arr1)]); //["1", "2", 3, 4, "5", 5, 7, 1, 2, 6, 8]
console.log([...new Set(arr2)]); //[1, 2, 3, 4, 5, 7, 6, 8]