当前位置: 首页 > Web前端 > vue.js

js多种高性能数组去重方法

时间:2023-03-31 18:24:36 vue.js

数组去重varary=[1,2,1,3,2,3,4,5,6,2,1];解决方案1??forloopvarary=[3,2,3,2,2];//1。分别取出数组中的每一项(不包括最后一项:最后一项之后没有要比较的内容)2.与后面的每一项进行逐项比较3.遇到相同的时候,重复这个项是从原数组中删除(拼接)//i解析:i=0item=3k=1第一轮ary[k]=2if(3===2){delete}k=2第一轮ary[k]=3if(3===3){delete}执行原拼接那里是数组变化splice(2,1)=>删除前[0:3,1:2,2:3,3:2,4:2]=>删除后[0:3,1:2,2:2,3:2]基于拼接删除,数组会发生变化,原数组的内容索引必须进入1k=3第一轮ary[k]=2if(3===2)...i=1第二轮item=2k=2第一轮ary[k]if(2===2)...删除前[0:3,1:2,2:2,3:2]删除后[0:3,1:2,2:2]k=3循环结束i=2第三轮循环结束*/for(vari=0;i依次取出每一项//=>item:依次取出每一项//=>i:当前取出的项的索引//=>k=i+1k和当前项对于每次比较:起始索引应为i+1for(vark=i+1;k等于:重复,我们取出的比较项k在原数组中删除ary.splice(k,1)//删除后不能让k累加//这样会导致数组崩溃。当我们删除当前项时,后面的每一项都要前进一位,即原来的数组都发生了变化,此时继续累加k,下次取出结果时会跳过一位k--;//=>先删减,加加时,相当于不加减}}}console.log(ary)=>(6)[1,2,3,4,5,6]=>这种方法不适合数据量大的情况,上万条数据基于该方法表示对象的属性名不会重复varary=[1,2,3,2,2,3,4,3,4,5]/**基于对象的属性名不能重复,我们实现高性能的数组去重*1.创建一个空对象*2.依次遍历数组中的每一项,并将值存入作为对象的属性名和属性值存储在每一项中**第一个循环1{1:1}*第一个循环2{1:1,2:2}*第一个循环3{1:1,2:2,3:3}*第一个循环4我们在存储之前做一个判断,判断当前对象是否已经有这个属性名,如果存在,说明之前存储这个项目的操作,进一步说明这个值已经出现在数组之前(也就是重复了。At这个时候,我们可以从数组中移除当前项)//如果判断这个值是否存在于对象属性中:如果没有这个属性,则获取到的属性值为undefined*/varobj={};for(vari=0;i高性能方法:/**1.我们获取数组最后一项的结果,替换当前项内容*2.删除最后一项*[12,23,34,56]想删除23*首先让56代替23[12,56,34,56]*首先删除最后一项[12,56,23]*/ary[i]=ary[ary.length-1];ary.length--;我-;continue;}//将此项存储为对象的属性名和属性值obj[item]=item;//=>obj[1]=1=>{1:1}}控制台.log(ary);es6中新的set方法varary=[1,2,3,2,2,3,4,3,4,5];newSet(ary)=>Set(5){1,2,3,4,5}Array.from(newSet(ary))方法varary=[1,2,3,2,2,3,4,3,4,5];Array.from(newSet(ary))=>(5)[1,2,3,4,5]varary=[1,2,3,2,2,3,4,3,4,5];varnewAry=数组。来自(新集合(ary))newAry=>(5)[1,2,3,4,5]