美文网首页
论数组去重的七种方式,抛砖引玉

论数组去重的七种方式,抛砖引玉

作者: 夜雨渐停丶我独行 | 来源:发表于2020-09-08 16:02 被阅读0次

目前只想到四种类型的思路
第一种是用es6的Set方法或者filter方法
第二种是拿出当前项和后面的内容比较 includes indexOf都行 这里注意点就是用i--的话可以避免数组塌陷 i > 0 因为最后一个已经没有比较价值了
第三种那一个对象把属性存起来,然后判断当前项是否存在对象中
第四种是邻项对比,先排序,然后加标识符最后使用正则\1和replace来筛选

Set方法去重

let arr = [1,3,6,23,6,6,22,18,8,3,1,1]
function filterArr(arr) {
    return [...new Set(arr)]
}
console.log(filterArr)

filter方法去重

let arr = [1,3,6,23,6,6,22,18,8,3,1,1]
function filterArr(arr) {
    return arr.filter(function (x, index, self) {
        return self.indexOf(x) === index;
    });
}
console.log(filterArr)

includes方法去重

let arr = [1,3,6,23,6,6,22,18,8,3,1,1]
function filterArr(arr) {
    for(let i = arr.length; i > 0; i--) {
        let newArr = arr.slice(0, i - 1)
        if(newArr.includes(arr[i])) {
            arr.splice(i, 1)
        }
    }
    return arr
}
console.log(filterArr)

indexOf方法去重

let arr = [1,3,6,23,6,6,22,18,8,3,1,1]
function filterArr(arr) {
    for(let i = arr.length; i > 0; i--) {
        let newArr = arr.slice(0, i - 1)
        if(newArr.join().indexOf(arr[i]) > -1) {
            arr.splice(i, 1)
        }
    }
    return arr
}
console.log(filterArr)

创建对象属性来存值

let arr = [1,3,6,23,6,6,22,18,8,3,1,1]
function filterArr(arr) {
    let json = {}
    for(let i = arr.length; i >= 0; i--) {
        if(json[arr[i]]) {
            arr.splice(i, 1)
        }else {
            json[arr[i]] = arr[i]
        }
    }
    return arr
}
console.log(filterArr)

创建对象属性来存值

let arr = [1,3,6,23,6,6,22,18,8,3,1,1]
function filterArr(arr) {
    arr = arr.sort((a, b)=> {return a - b})
    let reg = /(\d+,)\1*/g
    let newArr = []
    arr = arr.join() + ","
    arr.replace(reg, function(value, $1){
        newArr.push(parseFloat($1))
    })
    return newArr
}
console.log(filterArr)

目前想到的就这儿多了,欢迎各位科普

相关文章

网友评论

      本文标题:论数组去重的七种方式,抛砖引玉

      本文链接:https://www.haomeiwen.com/subject/uyfjektx.html