1. 程式人生 > >js 數組去重

js 數組去重

content return i++ div spa index 設置 pan 跳過

1、前言

去重方法千千萬萬,你要哪一種

2、es系列方法

2.1、es6 Set()方法

介紹:ES6提供了新的數據結構Set。它類似於數組,但是成員的值都是唯一的,沒有重復的值。
Set函數可以接受一個數組(或類似數組的對象)作為參數,用來初始化

new Set(test);//test為去重的數組

2.2、es7 includes

Array.prototype.includes方法返回一個布爾值,表示某個數組是否包含給定的值,與字符串的includes方法類似。該方法屬於 ES7 ,但 Babel 轉碼器已經支持

unique4 (arr) {
    let newArr = [arr[0
]]; for(index of arr){ if(!newArr.includes(index)){ newArr.push(index); } } return newArr; }

3、常規去重

思路:

  • 構建一個新的數組存放結果,設置狀態值
  • 從原數組中循環取出一個元素,與結果數組對比
  • 若結果數組中沒有該元素,則改變狀態值
  • 通過判斷狀態值進行結果數組的存儲

核心代碼:

unique1 (arr) {
    let newArr = [arr[0]];//現將第一個數加入到新數組中;
    arr.shift();
    let result 
= true;//判斷是否重復,默認不存在重復true for(index of arr) { for(res of newArr) { if(res === index){ result = false;//存在重復改變狀態值 break; } } if(result){ newArr.push(index);//不存在重復則加入新數組 } result = true;//循環解析重新改變狀態值
} return newArr; },

3、排序去重

思路:

  • 對數組進行排序(由於打亂了數組結構,不適用於需要保留原數組順序的)
  • 判斷第 i 個數組元素是否和 i-1 個數組元素相同,
  • 如果不相同,則表示新數組中不存在該元素,可以加入

核心代碼:

unique2 (arr) {
    arr.sort();//對數組進行排序
    let newArr = [arr[0]];//現將第一個數加入到新數組中;這裏移除
    let len = arr.length;
    //跳過數組第一個元素,從第二個開始
    for(let i = 1; i < len; i++) {
        //如果前後不相同,則不存在重復
        if(arr[i] !== arr[i-1]) {
            newArr.push(arr[i]);
        }    
    }
    return newArr;
},

5、對象去重

思路:

  • 創建一個新數組存儲結果,空對象將這個值作為屬性並賦值,進行存儲
  • 循環取出數組元素去對象中訪問對應屬性,
  • 如果存在則重復,不能加入數組

核心代碼:

unique3 (arr) {
    let newArr = [];
    let newObj = {};//定義一個對象,通過對象來獲取值
    for(index of arr) {
        //如果這個屬性不存在,則可以加入數組,並復制
        if(!newObj[index]) {
             newArr.push(index);
             newObj[index] = 1;
        }
    }
    return newArr;
}

6、結語

去重的方式還有很多,等待你去探索。。。

js 數組去重