js基本操做-數組去重

js基本操做-數組去重

數組去重的方法


1. 臨時數組保存(其實這裏面還沒考慮到數組裏面嵌套數組/對象的狀況)

把去重後的結果放在一個臨時數組中, 對原來數組的元素與臨時數組元素比較, 臨時數組中不存在這個元素的, 放入臨時數組。javascript

function unique (arr) {
    if (!Array.isArray(arr)) return arr;
    var result = [];
    arr.map(function (item) {
        if (result.indexOf(item) == -1) {
            result.push(item);
        }
    })
    return result;
}

2. 利用對象去重(當數組的鍵爲 11, '11'時, 會保留第一個出現的值)

建立一個新的數組存放結果, 和一個空的對象。for循環時, 每次取出一個元素與對象進行對比, 若是這個元素不重複, 則把它存放到結果數組中, 同時把這個元素的內容做爲一個對象的屬性, 並賦值, 存入對象中。java

function unique (arr) {
    if (!Array.isArray(arr)) return arr;
    var result = [];
    var obj = {}
    arr.map(function (item) { 
        if (!obj[item]) {
            result.push(item);
            obj[item] = 1
        };
    }) 
    return result;
}

3. 先排序, 後去重

先把數組排序, 而後比較相鄰的兩個值。排序的時候用原生的 sort 方法, JS引擎內部使用的是快速排序。數組

function unique(arr) {
    if (!Array.isArray(arr)) return arr;
    if (arr.length < 2) return arr;
    arr.sort(); // sort在元數組進行排序, 不生成副本
    var result = [arr[0]]
    arr.map(function (item, index, arr) {
        if (index > 0) {
            if (item !== arr[index - 1]) {
                result.push(item);
            }
        }
    })

    return result;
}
var arr = [99, 88, 22, 22, 44, 88, 99, '99']
console.log(unique(arr));

4. 利用 ES6 的 Set 對象 和 Array.from 方法

  • Set對象: 它是ES6新增的有序列表集合, 不會包含重複項。code

  • Array.from()方法: 將一個類數組或可遍歷對象轉換成真正的數組。對象

function unique (arr) {  
    if (!Array.isArray(arr)) return arr;
    if (arr.length < 2) return arr;
    return Array.from(new Set(arr))
}
var arr = [99, 88, 22, 22, 44, 88, 99, '99']
console.log(unique(arr));

5.利用 filter 和 Map 對象

function unique(arr) {
    if (!Array.isArray(arr)) return arr;
    if (arr.length < 2) return arr;
    return arr.filter(function(item, index, arr) {
        if (arr.indexOf(item) === index) {
            return true;
        }
    });
}
var arr = [99, 88, 22, 22, 44, 88, 99, '99']
console.log(unique(arr));
相關文章
相關標籤/搜索