[路飞]_知识·秒懂前端--数组去重的N种奇技淫巧

113 阅读1分钟

「这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战

首先我们定义一个含重复内容的数组变量:

var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{},{name:"jack"},{name:"jack"}];
function unique(arr){
    ……
}
console.log(unique(arr));

1、使用ES6新增Set()方法去重

function unique(arr){
  return Array.from(new Set(arr))
}
//注意:使用Set方法去重的时候,返回的值为set对象
//可通过Array.form方法将其转换成数组

Set() 方法去重的时候不用考虑兼容性问题,但是无法去掉“{}”空对象

2、双层循环,逐一对比

function unique(arr) {
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) { //j+1是指,当前下标为i的元素的下一个
      if (arr[i] == arr[j]) {
        arr.splice(j, 1); //当数组中的元素被删除一个之后,后面值的下标随之改变
        j--;  //进行--操作
      }
    }
  }
  return arr;
}

执行逻辑一定要分析清楚!

3、利用数组的pop()、push()或shift()、unshift() 以及indexOf()进行比对操作

function unique(arr) {
  if (!Array.isArray(arr)) {
    console.log('type error!');
    return;
  }
  let array = [];
  array.push(arr[0]);
  for (let i = 1; i < arr.length; i++) {
      //检测数组中是否存在某个值的方法:includes()、indexof()、
    /*if (array.indexOf(arr[i]) === -1) { //indexOf方法,当值不存在时返回-1
      array.push(arr[i]);
    }*/
    if (!array.includes(arr[i])) {
      array.push(arr[i]);
    }
  }
  return array;
}

indexof和includes方法进行的是==>先push—后检测—存在—跳过

4、将数组转换为对象的名称与值的形式存储,然后在执行筛查

//未完待续!明日更新