数组去重的多种方法

133 阅读1分钟

数组去重的多种方法

利用双层For循环进行去重

利用锁的巧妙关系进行数组去重

// 数组去重 方法 1
function arrUnique(array) {
    var _arr = [],
        isResult;
    for (var i = 0; i < array.length; i++) {
        isResult = false
        for (var j = 0; j < _arr.length; j++) {
            if (_arr[j] === array[i]) {
                isResult = true;
                break;
            }
        }
        if (!isResult) {
            _arr.push(array[i])
        }
    }
    return _arr;
}

利用双层循环进行逐个遍历去重

进行逐个遍历挨个比较去重,同样利用锁的巧妙关系

// 数组去重 方法 2 
function arrUnique(array) {
    var _arr = [],
        isResult;
    for (var i = 0; i < array.length; i++) {
        isResult = false
        for (var j = i + 1; j < array.length; j++) {
            if (array[i] === array[j]) {
                isResult = true;
                break
            }
        }
        if (!isResult) {
            _arr.push(array[i])
        }
    }
    return _arr;
}

利用排序,和indexOf进行去重

利用indexOf的查找机制进行去重

  • indexOf的查找机制,如

    var arr = [1, 1, 2, 2, 3, 4, 5]
    arr.indexOf(1) => 打印结果为 0 
    arr.indexOf(2) => 打印结果为 2
    
    indexOf从左向右查找 -1 或者找到后的第一个索引
    
function arrUnique(array) {
    var _arr = []
    array.sort()
    for (var i = 0; i < array.length; i++) {
        if (array.indexOf(array[i]) === i) {
            _arr.push(array[i])
        }
    }
    return _arr
}

使用ForEach配合indexOf进行数组去重

跟上面的方法一样 只不过使用了 ForEach

function arrUnique(array) {
    var _arr = []
    array.sort()
    array.forEach(function (item, index) {
        if (array.indexOf(item) === index) {
            _arr.push(item)
        }
    })
    return _arr;
}

使用includes进行去重

  • includesindexOf的区别
    • includes可以查找NaN并且返回值为布尔值
    • indexOf无法查询NaN并且返回值为-1或者找到的索引
function arrUnique(array) {
    var _arr = []
    array.forEach(function (item, index) {
        if (!_arr.includes(item)) {
            _arr.push(item)
        }
    })
    return _arr;
}