简单类型数组去重的若干方法

var arr = [1, 3, 5, 2, 2, 5, 6, 7, 8, 3, 4, 5, 6, 8, 9, 6]

1. 利用两个数组,遍历源数组和目标数组中,目标数组中存在这个元素,则不添加, 不存在则添加
 function uniqueArr(array) {
      var _arr = [],
        isRepeat;
      for(var i = 0; i < array.length; i++) {
        isRepeat = false;
        for(var j = 0; j < _arr.length; j++) {
          if(_arr[j] == array[i]) {
            isRepeat = true;
            break;
          }
        }
        if(!isRepeat) {
          _arr.push(array[i])
        }
      }

      return _arr;
    }
2. 双重遍历原数组,第一层遍历所有的,第二层从i+1开始遍历, 第二层的数组不存在与第i位重复的,则将这个元素存到目标数组中
    function uniqueArr(array) {
      var _arr = [],
        isRepeat;
      for(var i = 0; i < array.length; i++) {
        isRepeat = false;
        for(var j = i + 1; j < array.length; j++) {
          if(array[j] == array[i]) {
            isRepeat = true;
            break;
          }
        }
        if(!isRepeat) {
          _arr.push(array[i])
        }
      }

      return _arr;
    }
3. 利用数组的filter方法和indexOf方法,这个方法非常巧妙,indexOf会返回这个元素第一次出现的下标,如果这个下标刚好为filter遍历的index, 则说明这个元素第一次出现,可以返回
    function uniqueArr(array) {
      return array.filter((item, index) => array.indexOf(item) === index)
    }

    function uniqueArr(array) {
      var _arr = [];

      array.forEach(item => {
        if(_arr.indexOf(item) < 0) {
          _arr.push(item)
        }
      });

      return _arr;
    }

4. 利用sort和遍历,先将数组排序,排序后的数组,相同的元素会排在一起,我们只要找出相邻的元素为不同的元素,将左边的元素push到目标数组中则可以。
    function uniqueArr(array) {
      var _arr = [];
      array.sort();
      for(var i = 0; i < array.length; i++) {
        if(array[i] !==array[i+1]) {
          _arr.push(array[i])
        }
      }
      return _arr;
    }

5. 利用sort和遍历,先将数组排序,排序后的数组,相同的元素会排在一起, 我们遍历原数组中,找出和目标数组中最后一位不同的元素就可以了
    function uniqueArr(array) {
      var _arr = [];
      array.sort();
      for(var i = 0; i < array.length; i++) {
        if(array[i] !== _arr[_arr.length - 1]) {
          _arr.push(array[i])
        }
      }
      return _arr;
    }

    // es6 
indexOf和includes区别:
indexOf: 返回元素位置,对NaN无效, eg: arr = [1, NaN, 2], arr.indexOf(NaN) // -1
includes:返回true和false
6. 利用es6的includes方法, 遍历原数组,将不存在于目标数组中的元素push进目标数组中就可以
    function uniqueArr(array) {
      var _arr = [];

      array.forEach(item => {
        if(!_arr.includes(item)) {
          _arr.push(item)
        }
      })
      return _arr;
    }
7. 先用sort排序,通过数组的reduce方法归纳数组,将prev数组的最后一位与原数组比较, 不同就可以留下,这个方法与方法5类似
function uniqueArray(array) {
  array.sort()
  return array.reduce((prev, item, index) => {
    if (prev[prev.length - 1] !== item) {
      prev.push(item);
    }
    return prev;
  }, [])
}

8. 利用map的string key的唯一性,将数组元素作为map的key去重 function uniqueArray(array) {
var _arr = [], map = new Map(); for (var i = 0; i < array.length; i++) { if (!map.get(array[i])) { map.set(array[i], 1) _arr.push(array[i]) } } return _arr }
9. 利用object的string key的唯一性,将数组元素作为map的key去重 function uniqueArray(array) {
var _arr = [], obj = {}; for (var i = 0; i < array.length; i++) { if (!obj[array[i]]) { obj[array[i]] = 1; _arr.push(array[i]) } } return _arr } 10. 利用set的元素唯一性,set中没有重复的元素 function uniqueArray(array) { return Array.from(new Set(array)) } console.log(uniqueArray(arr))
原文地址:https://www.cnblogs.com/ycherry/p/15150889.html