前端面试题之数组去重

2019-10-29  本文已影响0人  汶沐

// 可以在函数刚开始时,添加个鉴别参数是否为数组

if (!Array.isArray(arr)) {
console.log('type error!')
return
}

1、Es6 Set

function unique (arr) {
  return Array.from(new Set(arr))
  // Array.from()方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组
}

代码最少,但缺点是无法去掉{}空对象。

2、for嵌套for,再splice

function unique(arr) {
  for(var i=0;i<arr.length;i++){
    for(var j=i+1;j<arr.length;j++){
      if(arr[i] == arr[j]) {
        arr.splice(j,1);
        j--;
      }
    }
  }
  return arr;
}

3、indexOf

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

4、sort()

function unique(arr) {
  arr = arr.sort()  //对数组进行排序
  var array = [arr[0]];
  for (var i=1;i<arr.length;i++) {
    if (arr[i] !== arr[i-1]) { //与相邻元素对比
      array.push(arr[i]);
    }
  }
  return array;
}

5、includes

function unique(arr) {
  var array = [];
  for(var i=0;i<arr.length;i++) {
    if(!array.includes(arr[i])) {  //includes 检验数组是否含有某个值
      array.push(arr[i]);
    }
  }
  return array
}

6.[…new Set(arr)]

  […new Set(arr)] // []和...都不能省去,相当于简化了第一种方法
谢谢
上一篇下一篇

猜你喜欢

热点阅读