1.indexOf
let arr = [1,2,1,1,1,2,3];
function unique1(a){
let temp = [];
for(let i=0;i<a.length;i++){
//如果没有找到首次出现的位置代表这个数不重复
if(temp.indexOf(a[i]) === -1){
temp.push(a[i]);
}
}
return temp;
}
console.log(unique1(arr));
// [1, 2, 3]
2.indexOf+filter
let arr = [1,2,1,1,1,2,3];
function unique2(arr){
return Array.prototype.filter.call(arr,function(item,index){
return arr.indexOf(item) === index;
});
}
console.log(unique2(arr));
// [1, 2, 3]
3.es6的解构和set
let arr = [1,2,1,1,1,2,3];
function unique3(arr){
return [...new Set(arr)]
}
console.log(unique3(arr));
// [1, 2, 3]
4.es6的Array.from将类数组转为数组和set
let arr = [1,2,1,1,1,2,3];
function unique4(arr){
return Array.from(new Set(arr))
}
console.log(unique4(arr));
// [1, 2, 3]
5.利用对象属性去重并且能统计每个元素出现次数
let arr = [1,2,1,1,1,2,3];
function unique5(arr){
let item = [];
let obj = {};
for(let i=0;i<arr.length;i++){
if(!obj[arr[i]]){
item.push(arr[i]);
obj[arr[i]] = 1;
}else{
obj[arr[i]]++;
}
}
console.log(obj)
return item;
}
console.log(unique5(arr));
//{1: 4, 2: 2, 3: 1}
//[1,2,3]