数组去重的常用算法

数组去重

1. 利用ES6 set去重

function fn(arr) {
    
    
  return Array.from(new Set(arr))
  // 简写形式
  return [...new Set(arr)]
}

let arr = [1, 2, 3, 4, 5, 5, 5, 4, 3, 2, 1];
console.log(fn(arr));  // [1, 2, 3, 4, 5]

2. 利⽤for嵌套for,然后splice去重(ES5中最常⽤)

  • 双层循环,外层循环元素,内层循环时⽐较值。值相同时,则删去这个值。
function fn(arr) {
    
    
  // 先深拷贝,防止修改原数组
  let _arr = JSON.parse(JSON.stringify(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(j, 1);
        j--;
      }
    }
  }
  return _arr
}

3. 利⽤indexOf去重

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

4. 利⽤sort()

function fn(arr) {
    
    
  let _arr = JSON.parse(JSON.stringify(arr)).sort()
  let Arr = [_arr[0]];
  for(let i = 1; i < arr.length; i++) {
    
    
    if (arr[i] !== arr[i - 1]) {
    
    
      Arr.push(arr[i]);
    }
  }
  return Arr
}

5. 利⽤对象的属性不能相同的特点进⾏去重

function fn(arr) {
    
    
  let _arr= [];
  let obj = {
    
    };
  for (let i = 0; i < arr.length; i++) {
    
    
    if (!obj[arr[i]]) {
    
    
      _arr.push(arr[i])
      obj[arr[i]] = 1 
    } else {
    
    
      obj[arr[i]]++
    }
  }
  return _arr;
}

6. 利⽤includes

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

7. 利⽤filter

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

8. 利⽤Map数据结构去重

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

Guess you like

Origin blog.csdn.net/weixin_49524462/article/details/118600902