let arr = [1,2,3,1,2,3,12,1,3,1,2] // 第一种 [...new Set()] /* function fn(arr) { return [...new Set(arr)] } console.log(fn(arr)) */
//第二种 indexOf() 找到元素第一次出现的位置,没有找到返回 -1
/* let newArr = []
for (let i = 0;i<arr.length;i++) {
if(newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i])
}
}
console.log(newArr) */
//第三种 双重for 去重
/* let arr = [2,3,4,5,2,3,4];
let newArr = [];
newArr.push(arr[0]);
for (let i = 1;i<arr.length;i++) {
let flag;
for (let j= 0;j<newArr.length;j++) {
flag = false;
if(arr[i] !== newArr[j]) { //条件为真 flag为true,
flag = true;
} else {
break;
}
}
// newArr.push(arr[i]);
if (flag === true) {
newArr.push(arr[i]);
}
}
console.log(newArr); */
//第四种 reduce('回调函数',初始值) ,返回一个新数组
// 回调函数中第一个参数为累计器,刚运行时有初始值就用初始值,没有就用数组第一个值
// 第二个参数 有初始值就使用第一个值,没有就使用数组第二个值
//第三个参数 默认为1开始的索引号,如果有初始值就从0开始
//第四个参数为数组本身
/* let result = arr.reduce(function(pre,cur,index,arr) {
if(pre.includes(cur)) {
return pre
} else {
return pre.concat(cur)
}
},[])
console.log(result) */
//第五种 filter() 遍历筛选满足条件的值,将满足条件的值返回到一个新数组当中
/* let result = arr.filter((item,index)=>{
return arr.indexOf(item) === index
})
console.log(result) */
//第六种 利用Map 数据结构
function unique(arr) {
let seen = new Map()
return arr.filter((item)=> {
return !seen.has(item) && seen.set(item,1)
})
}
console.log(unique(arr))