Interview 01 Array de-duplication

Summary of methods for deduplication of arrays:

待去重数组
let arr = [1,1,2,3,6,6,6,6,7,8,7,9,]
  1. Double for loop (NaN cannot remove duplicates)
function unique(arr=[]) {
    
    //默认值

    let length = arr.length
    for (let i = 0; i < length-1; i++) {
    
    
        for (let j = i + 1; j < length; j++) {
    
    
            console.log('i', arr[i],':j',arr[j])
            if(arr[i]===arr[j]) {
    
    
                arr.splice(j,1)
                i--
                length--
            }
        }
    }
    return arr
}
console.log(unique(arr))
//结果: [1, undefined, null, NaN, NaN, 11, 2, 3, 9, 8, 6, 7]
  1. for loop use indexOf || includes to simplify
//ES6 includes() 检测数组当中是否包含某个值
function unique(arr) {
    
    
let result = []
    for (let i = 0; i < arr.length; i++) {
    
    
        if (!result.includes(arr[i])) {
    
    
            result.push(arr[i])
        }
    }
    return result
}
//[1, undefined, null, NaN, 11, 2, 3, 9, 8, 6, 7]

//ES5 使用 indexOf 检测某个值第一次出现的位置
function unique(arr) {
    
    
let result = []
    for (let i = 0; i < arr.length; i++) {
    
    
        if (result.indexOf(arr[i])===-1) {
    
    
            result.push(arr[i])
        }
    }
    return result
}
//[1, undefined, null, NaN, NaN, 11, 2, 3, 9, 8, 6, 7]

//indexOf 相较于 includes 的缺点:
//由 indexOf 的作用可以知道,indexOf 的结果需要与 -1(数组当中不存在该值) 进行比较
//由于indexOf 内部是使用 === 来进行判断所以会对NaN进行误判
//[NaN].indexOf(NaN)  ======== 结果-1
  1. Sort first
function unique(arr = []) {
    
    
    if (!(arr instanceof Array)) return
    arr = arr.sort((a, b) => a - b)
    let length = arr.length
    for(let i = 0; i< length-1;i++) {
    
    
        if(arr[i] === arr[i+1]) {
    
    
            arr.splice(i+1,1)
            i--
            length--
        }
    }
    return arr
}
console.log(unique(arr))
//结果: [null, 1, 2, 3, 6, 7, 9, NaN, NaN, 6, 7, 8, 9, 11, undefined]
  1. ES6 Set data structure
//Set 数据结构
[...new Set(arr)]
Array.from(new Set(arr))

//[1, undefined, null, NaN, 11, 2, 3, 9, 8, 6, 7]
  1. Use filter to remove duplication
function unique(arr=[]) {
    
    
   if (!(arr instanceof Array)) return
    let result = arr.filter((item,index) =>index === arr.indexOf(item))
    return result
}

//结果: [1, undefined, null, 11, 2, 3, 9, 8, 6, 7]

Summary: Among the 5 ways to remove duplication, only Set includes (ES6 feature) can remove NaN

Guess you like

Origin blog.csdn.net/Chennfengg222/article/details/104756623