方法一,遍历循环对比,简单粗暴
var arr = [8,10,96,120,3,8,96,11,8,0,10,0,10,82,'82']
var t = [];
t[0] = arr[0];//将数组第一个元素放进来
for(var i = 0;i < arr.length;i++){
//循环arr数组
for(var j = 0;j < t.length;j++){
//循环t数组
if(t[j] === arr[i]){
//如果arr中的值跟t中的值相等,break循环
break;
}
if(j === t.length-1){
//当内层循环循环到t数组最后的时候
t[j+1] = arr[i];//向数组增加一个值,可用t.push(arr[i]);代替
}
}
}
console.log(t);//[8, 10, 96, 120, 3, 11, 0, 82, "82"]
方法二,利用ES6的Set方法,简单快速
var arr = [8,10,96,120,3,8,96,11,8,0,10,0,10,82,'82']
var brr = new Set(arr)//这样返回的是一个对象,需要类型转换
brr = Array.from(brr)
console.log(brr)//[8, 10, 96, 120, 3, 11, 0, 82, "82"]
方法三,利用ES6的Map方法
var arr = [8,10,96,120,3,8,96,11,8,0,10,0,10,82,'82']
var res = new Map()//将会创建一个Map对象(键值对的集合)
//可以实现数组去重,因为new Map的键值对的key是唯一的,将数组的元素作为key实现去重
arr=arr.filter((item) => {
//res.has(item)判断res中有没有item,如果有,返回true
// !res.has(item) && res.set(item, 1),如果item的值已经存在于res中的键值,!true,则不set,否则才set进去
return !res.has(item) && res.set(item,'0')
//如果,res没有item,才往res塞入item,set(key,value),return返回true,筛选出item的值保存到arr
})
console.log(arr)//[8, 10, 96, 120, 3, 11, 0, 82, "82"]
方法四,利用对象的特性,键不重复
var arr = [8,10,96,120,3,8,96,11,8,0,10,0,10,82,'82']
var brr=[]
var obj={}
arr.map((item)=>{
obj[JSON.stringify(item)]=item//将数组的值转化为JSON字符串,作为对象的键名,实现去重
})
//利用对象的方法Object.keys()去除obj的键组成数组
brr=Object.keys(obj).map((item)=>{
//循环数组,将每一项转换为JS数据类型,赋值给brr
return JSON.parse(item)
})
console.log(brr)//[0, 3, 8, 10, 11, 82, 96, 120, "82"]