1、创建一个新数组来储存判断元素,双重循环,最原始的逻辑 es3

    1. let arr1 = [1,1,2,23,3,4,4,3];
    2. function uniqueArr (arr){
    3. if(arr.length){
    4. let _arr = [],
    5. isRepeat;
    6. for(var i = 0; i < arr.length; i++){
    7. isRepeat = false;
    8. for(var j = 0; j < _arr.length; j++){
    9. if(_arr[j] === arr[i] ){
    10. isRepeat = true
    11. break; //当前元素已重复,跳出当前循环
    12. }
    13. }
    14. //判断当前元素是否重复
    15. if(!isRepeat){
    16. _arr.push(arr[i])
    17. }
    18. }
    19. }
    20. return _arr
    21. }

    2、利用对象属性不可重名的特点 filter去重 es5

    1. let arr1 = [1,1,2,2,3,3,2,1];
    2. function uniqueArr(arr){
    3. let obj = {},
    4. newArr = arr.filter((item)=>{
    5. if(obj[item]){
    6. return false
    7. }else{
    8. obj[item] = Symbol()
    9. return true
    10. }
    11. });
    12. return newArr
    13. }

    3、利用sort先排序,重复元素会排到一起,判断前一项和后一项是否相等。 es5

    1. let arr1 = [1,2,1,2,3,3,5,5,6,89];
    2. function uniqueArr (arr){
    3. arr.sort()
    4. let newArr = [];
    5. for( var i =0; i < arr.length; i++ ){
    6. if(arr[i] !== arr[i+1]){
    7. newArr.push(arr[i])
    8. }
    9. // 判断条件改成 arr[i] !== newArr[newArrl.length - 1] 也行
    10. }
    11. return newArr
    12. }

    4、利用Array.prototype.indexOf 返回第一次出现的索引 reduce去重(返回一个累计计算的数组)

    1. let arr1 = [1,1,2,2,3,3,1,2,8];
    2. function uniArr(arr){
    3. let newArr = arr.reduce((accumulotar,ele,index)=>{
    4. if(arr.indexOf(ele) === index){
    5. accumulotar.push(ele)
    6. }
    7. return accumulotar
    8. },[]);
    9. return newArr
    10. }

    5、es6 - includes
    includes与indexOf的区别:
    includes返回boolean,对NaN有效。
    indexOf返回 -1 和 索引,对NaN无效(返回-1)。

    1. let arr1 = [1,2,2,1,6,5,6,5];
    2. function uniqueArr (arr){
    3. let newArr = [];
    4. arr.forEach((item)=>{
    5. if(newArr.includes(item)){
    6. break;
    7. }else{
    8. newArr.push(item)
    9. }
    10. })
    11. return newArr
    12. }

    6、利用set(储存值唯一性)去重

    1. let arr1 = [1,1,2,2,1,5,6,7,6,7,5];
    2. function uniqueArr(arr){
    3. return Array.from(new Set(arr))
    4. }