数组去重6种方法

162 阅读1分钟

使用 Set

Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用,所以当你放入一个数组,它会自动去掉重复的值

const array = [1, 1, 2, 4, 5, 3, 7, 7];
[... new Set(array)]
// [1, 2, 4, 5, 3, 7]

使用 filter()

filter() 方法创建一个新数组, 通过给定的条件来返回新的数组

const array = [1, 1, 2, 4, 5, 3, 7, 7];
array.filter((item, index) => array.indexOf(item) === index);
// [1, 2, 4, 5, 3, 7]

使用 Map()

map() 方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值

const array = [1, 1, 2, 4, 5, 3, 7, 7];
function unique (arr) {
  const seen = new Map()
  return arr.filter((a) => !seen.has(a) && seen.set(a, 1))
}

使用 indexOf

当你传入一个参数的时候,它会返回入参数的索引值。如果未找到就返回 -1

function unique(arr){
  var result = [];
  for(let i = 0; i<arr.length; i++){
    if(result.indexOf(arr[i]) === -1){
      result.push(arr[i]);
    }
  }
return result;
}

使用 hash

使用保存数组值,判断数组值是否存在hash中,true表示记录保存

function unique(arr){
  var result = [], hash = {};
  for(let i = 0; i < arr.length; i++){
    if(!hash[arr[i]]){
      hash[arr[i]] = true;
      result.push(arr[i])
    }
  }
  return result;
}

使用 sort方法

利用sort方法先对数组进行排序,然后再遍历数组,将和相邻元素不相同的元素挑出来

function unique(arr) {
  if (!Array.isArray(arr)) return;
  arr = arr.sort((a, b) => a - b);
  var result = [arr[0]];
  for (var i = 1; i < arr.length; i++) {
    if (arr[i] !== arr[i-1]) {
      result.push(arr[i]);
    }
  }
  return result;
}