7种数组去重

64 阅读1分钟
// 1.Set
function uniq(arr) {
    var newArr = new Set(arr)
    return [...newArr]
}
//2.新建一个空数组,利用indexOf判断是否存在与数组中,不存在则添加
function uniq(arr) {
    var newArr = []
    arr.forEach(item => {
        if (newArr.indexOf(item) === -1) {
            newArr.push(item)
        }
    })
    return newArr
}

//3.与2一样,就是把forEach改为for而已,新建一个空数组,利用indexOf判断是否存在与数组中,不存在则添加
function uniq(arr) {
    var newArr = []
    for (var i = 0; i < arr.length; i++) {
        if (newArr.indexOf(arr[i]) === -1) {
            newArr.push(arr[i])
        }
    }
    return newArr
}

//4.与3大同小异,新建一个空数组,利用includes判断是否存在与数组中,不存在则添加
function uniq(arr) {
    var newArr = []
    for (var i = 0; i < arr.length; i++) {
        if (!newArr.includes(arr[i])) {
            newArr.push(arr[i])
        }
    }
    return newArr
}

//5.利用filter返回一个新数组,利用indexOf判断是与下标相同的
function uniq(arr) {
    return arr.filter((item, i) => {
        return arr.indexOf(item) === i
    })
}

//6.双重循环,判断有相同的删除
function uniq(arr) {
    for (var i = 0; i < arr.length; i++) {
        for (var y = i+1; y < arr.length; y++) {
            if (arr[i] === arr[y]) {
                arr.splice(y, 1)
                y--
            }
        }
    }
    return arr
}

//7.for循环,利用indexOf找数组元素的下标不存在的,则删除
function uniq(arr) {
    for (var i = 0; i < arr.length; i++) {
        if (arr.indexOf(arr[i]) !== i) {
            arr.splice(i, 1)
            i--
        }
    }
    return arr
}