js数组去重

前端面试的时候,面试官经常问到你知道数组去重么?知道几种?如果你能答出10种,面试官肯定会对你刮目相看。接下来,我就将总结的11种数组去重方法一一列出来!

1.利用ES6 new Set()去重

这里就有两种方法:

  • new Set()结合Array.from()
function unique(arr) {
   return Array.from(new Set(arr));
}
  • new Set()结合[...]
function unique(arr) {
  return [...new Set(arr)];
}

2、sort排序

  • sort()结合push()
function unique(arr) {
  let newArr = [];
  arr = arr.sort();
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] !== arr[i + 1]) {
      newArr.push(i);
    }
  }
  return newArr;
}
  • sort()结合splice()
function uinque(arr) {
  arr = arr.sort();
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === arr[i + 1]) {
      arr.splice(i, 1);
      i--;
    }
  }
  return arr;
}

3、for双重循环 splice()

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

4、indexOf()

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

5、利用对象的属性不能相同的特点进行去重

function unique(arr) {
  let obj = {};
  let newArr = [];
  for (let i in arr) {
    if (!obj[arr[i]]) {
      newArr.push(arr[i]);
      obj[arr[i]] = 1;
    } else {
      obj[arr[i]] = i++;
    }
  }
  return newArr;
}

6、includes()结合push()

function unique(arr) {
  let newArr = [];
  for (let i = 0; i < arr.length; i++) {
    if (!newArr.includes(arr[i])) {
      newArr.push(arr[i]);
    }
  }
  return newArr;
}

7、filter过滤

function unique(arr) {
  arr = arr.filter((item, index) => {
    return arr.indexOf(item) === index;
  });
  return arr;
}

8、递归

function unique(arr) {
  arr = arr.sort();
  function loop(index) {
    if (index >= 1) {
      if (arr[index] === arr[index - 1]) {
        arr.splice(index, 1);
      }
      loop(index - 1);
    }
  }
  loop(arr.length - 1);
  return arr;
}

9、利用Map数据结构去重

function unique(arr) {
  let map = new Map();
  newArr = [];
  for (let i = 0; i < arr.length; i++) {
    if (!map.has(arr[i])) {
      map.set(arr[i], false);
      newArr.push(arr[i]);
    }
  }
  return newArr;
}

你可能感兴趣的:(js数组去重)