js 數組去重總結

1、es6 set

ES6 提供了新的數據結構 Set。它類似於數組,但是成員的值都是唯一的,沒有重複的值。
let arr = [1,2,3,4,3,2,3,4,6,7,6];
let unique = (arr)=> [...new Set(arr)];
unique(arr);//[1, 2, 3, 4, 6, 7]

2、es6 map

思路爲map對象裏沒有數組元素的屬性,就在map對象裏添加數組元素的屬性,並賦值爲1,然後在過濾。
let arr = [1,2,3,4,3,2,3,4,6,7,6];
let unique = (arr)=> {
    let seen = new Map();
    return arr.filter((item) => {
        return !seen.has(item) && seen.set(item,1);
    });
};
unique(arr);

3、for 雙重循環

通過判斷第二層循環,去重的數組中是否含有該元素,如果有就退出第二層循環,如果沒有j==result.length就相等,然後把對應的元素添加到最後的數組裏面。
let arr = [1,2,3,4,3,2,3,4,6,7,6];
let result = [];
for(var i = 0 ; i < arr.length; i++) {
    for(var j = 0 ; j < result.length ; j++) {
        if( arr[i] === result[j]){
            break;
        };
    };
    if(j == result.length){
        result.push(arr[i]);
    };
};
console.log(result);

4、indexOf

indexOf() 方法可返回某個指定的元素在數組中首次出現的位置。如果沒有就返回-1。
let arr = [1,2,3,4,3,2,3,4,6,7,6];
let unique = (arr) => {
    let result = [];
    for( var i = 0 ; i < arr.length ; i++){
        if(result.indexOf(arr[i]) == -1){
            result.push(arr[i])
        }
    };
    return result;
};
unique(arr);

5、indexOf filter

let arr = [1,2,3,4,3,2,3,4,6,7,6];
let unique = (arr) => {
    return arr.filter((item,index) => {
        return arr.indexOf(item) === index;
    })
};
unique(arr);

6、排序後去重

先數組排序,然後判斷是否是第一個元素並且前一個元素是否和後一個元素相同,不同就加進新數組
let arr = [1,2,3,4,3,2,3,4,6,7,6];
let unique = (arr) => {
    let arrNew = arr.sort((a,b)=>a-b);
    let seen,result = [];
    for(var i = 0 ; i < arrNew.length ;i++){
        if(!seen || seen != arrNew[i]){
            result.push(arrNew[i]);
        };
        seen = arrNew[i]
    };
    return result;
};
unique(arr);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章