前端實現數組去重的三個辦法


1、Set結構去重。

這是ES6 提供了新的數據結構 Set。它類似於數組,但是成員的值都是唯一的,沒有重復的值。

1 let unique= [...new Set(array)];
2 //es6 Set數據結構類似於數組,成員值是唯一的,有重復的值會自動去重。
3 //Set內部使用===來判斷是否相等,類似'1'和1會兩個都保存,NaN和NaN只會保存一個

2、遍歷,將值添加到新數組,用indexOf()判斷值是否存在,已存在就不添加,達到去重效果。

let a = ['1','2','3',1,NaN,NaN,undefined,undefined,null,null, 'a','b','b'];
    let unique= arr =>{
         let newA=[];
        arr.forEach(key => {
           if( newA.indexOf(key)<0 ){ //遍歷newA是否存在key,如果存在key會大於0就跳過push的那一步
             newA.push(key);
           }
        });
        return newA;
    }
    console.log(unique(a)) ;//["1", "2", "3", 1, NaN, NaN, undefined, null, "a", "b"]
//ps:這個方法不能分辨NaN,會出現兩個NaN。是有問題的,下面那個方法好一點。

3、遍歷,將數組的值添加到一個對象的屬性名里,並給屬性賦值,對象不能添加相同屬性名,以這個為依據可以實現數組去重,然后用Object.keys(對象)返回這個對象可枚舉屬性組成的數組,這個數組就是去重后的數組。

 let a = ['1', '2', '3', 1,NaN,NaN,undefined,undefined,null,null, 'a', 'b', 'b'];
    const unique = arr => {
        var obj = {}
        arr.forEach(value => {
            obj[value] = 0;//這步新添加一個屬性,並賦值,如果不賦值的話,屬性會添加不上去
        })
        return Object.keys(obj);//`Object.keys(對象)`返回這個對象可枚舉屬性組成的數組,這個數組就是去重后的數組
    }
    console.log(unique(a));//["1", "2", "3", "NaN", "undefined", "null", "a", "b"]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM