JS数组去重的几种方法
1,新建一个数组,遍历老数组,判断新数组中是否存在老数组中的项,若不存在,则将此项添加至新数组,若存在,则略过。
2,利用filter()方法,遍历数组,执行程序,将程序结果为true的项添加的新数组返回
3,new Set()
4,将数组排序,比较相邻的两项,如不相同,则添加至新数组
5,or of + OBject利用对象的属性不会重复这一特性,校验数组元素是否重复
具体实现代码及执行时间如下
<!DOCTYPE html> <html lang="en"> <head></head> <body></body> <script> let arr1 = Array.from(new Array(1000000), (x, index) => { return index }) let arr2 = Array.from(new Array(500000), (x, index) => { return index + index }) let start = new Date().getTime() console.log('开始数组去重') function distinct(a, b) { // 数组去重 let arr = a.concat(b) //1,filter return delRepeated(arr) } function delRepeated(arr){ //方法1, 用时11453ms // filter 遍历数组返回执行结果为true的项,组成一个新数组,indexOf从数组头部开始查找某项,返回其索引值,若找不到返回-1 // return arr.filter((item,index)=>{ // return arr.indexOf(item) === index // }) //方法2, //新建一个数组,遍历待去重的数组,若新数组中不包含此项,则将此项添加至新数组,若有则略过 // let result = [] // arr.forEach(item=>{//用时9428 // result.indexOf(item) === -1 && result.push(item) // }) // arr.forEach(item=>{//用时9589 // !result.includes(item) && result.push(item) // }) // return result // 方法3 new Set() 用时20ms // return [...new Set(arr)] // 方法4 先用Array.sort()将数组排序,再比较相邻元素是否相等,从而排除重复项,用时20ms // let result = [] // arr = arr.sort() // for(let i=0,len=arr.length;i<len;i++){ // arr[i] !== arr[i-1] && result.push(arr[i]) // } // return result // 方法5 for of + OBject利用对象的属性不会重复这一特性,校验数组元素是否重复 // let result = [] // let obj = {} // for(i of arr){ // if(!obj[i]){ // result.push(i) // obj[i] = 1 // } // } // return result // 方法5是最优的 } console.log('去重后的长度', distinct(arr1, arr2).length) let end = new Date().getTime() console.log('耗时', end - start) </script> </html>
浙公网安备 33010602011771号