别找了!js中数组去重的多种方式

68 阅读1分钟

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))